Каков рекомендуемый подход создания идентичности в инфраструктуре Entity?

Мне интересно, что является наиболее эффективным способом для StoreGeneratedPattern.

В прошлом я был использован, чтобы дать БД генерировать идентификатор для меня, но мне было интересно, есть ли какие-либо преимущества при настройке

StoreGeneratedPattern = None 

вместо

StoreGeneratedPattern = Identity

Я даже не уверен, что произойдет, когда я установил его в Calculated.

Любые рекомендации? Есть ли хорошая статья, связанная с этим, потому что msdn не очень объяснительна. Я использую в основном ints с несколькими GUID в моей схеме.

Ответ 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. Без него это невозможно. Эти команды выполняются в одном обратном направлении в базу данных, поэтому практически нет влияния на производительность.