Каков рекомендуемый подход к созданию идентичности в среде Entity? - PullRequest
10 голосов
/ 17 марта 2011

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

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

StoreGeneratedPattern = None 

вместо

StoreGeneratedPattern = Identity

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

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

1 Ответ

20 голосов
/ 17 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...