Ответ 1
Отметьте сообщение в блоге о StoreGeneratedPattern
. Это объясняет некоторые различия между Identity
и Computed
. При использовании StoreGeneratedPattern
для идентификатора (PK) правильная опция None
, если вы назначаете идентификатор в приложении или Identity
, если вы назначаете идентификатор в БД. Computed
опция "недействительна", потому что эта опция используется, когда значение изменяется во время сохранения каждого объекта (также в обновлениях), и это не относится к идентификатору.
Разница между Identity
и Computed
- это поведение выполняемой команды SQL. Если свойство Identity
EF выберет значение после Insert и вернет его в ваше приложение. Если свойство Computed
EF выберет значение после вставки и обновления и вернет его в ваше приложение.
Edit:
StoreGeneratedPattern.Identity
не относится к Identity в БД. Вам не нужно иметь идентификатор в БД, и вы можете установить идентификатор с некоторым другим техническим значком (значение по умолчанию для guid или trigger), но вам все равно нужно StoreGeneratedPattern.Identity
, чтобы вернуть значение в ваше приложение.
Как только вы используете Identity
или Computed
, EF всегда будет следовать за каждой колонкой Insert или Update with Select for db. Без него это невозможно. Эти команды выполняются в одном обратном направлении в базу данных, поэтому практически нет влияния на производительность.