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