Entity Framework 4.1 - Создание значений первичного ключа - PullRequest
0 голосов
/ 24 июня 2011

Краткая информация:

  • Сначала используйте код EF 4.1.
  • Использование классов POCO без декорирования атрибутов.
  • Использование плавной конфигурации в классах EntityTypeConfiguration <> для сопоставления POCO с базой данных.
  • В соответствии с шаблоном DDD, с использованием общих репозиториев, совокупных корней, спецификаций и т. Д.

Проблема:

Для объектов с первичным ключом, установленным в качестве идентификатора, DatabaseGeneratedOption.Identity должен работать нормально.

Однако в нашей текущей схеме есть «интересный» способ создания первичных ключей. Вызывается хранимая процедура, которая создает «следующий» уникальный ключ для использования (один и тот же sproc вызывается для нескольких разных таблиц, чтобы обеспечить уникальный ключ для всех них). Это было из унаследованной структуры, о которой я не буду рассказывать в этом посте, но мне нужно иметь возможность ее реализовать.

Я устанавливаю карту в DatabaseGeneratedOption.None. Каков наилучший подход к обработке получения нового идентификатора прямо перед вставкой записи? Могу ли я обработать событие в DbContext?

Спасибо!

1 Ответ

1 голос
/ 25 июня 2011

Значения DatabaseGeneratedOption устанавливают, как EF обрабатывает свойство:

  • None - стандартное свойство.EF загрузит свое значение во время выбора, позволит приложению изменить значение и сохранить его.
  • Identity - EF ожидает, что это свойство будет установлено базой данных при вставке записи.EF автоматически загрузит это значение обратно в сущность при вставке записи.Это не обязательно должен быть столбец идентификаторов в базе данных - это также может быть значение, сгенерированное триггером.Прикладная программа не может установить значение для свойства, помеченного как идентификатор
  • Computed - EF ожидает, что это свойство может изменяться в базе данных после каждой модификации.Он перезагружает значение после каждой вставки или обновления.Приложение не может установить значение для свойства, помеченного как личность.

Поэтому, если вы хотите вызвать процедуру самостоятельно в своем приложении, вы должны использовать None.Например, если вы решили использовать перед вставкой триггер для выполнения процедуры, вы должны использовать Identity.

DatabaseGeneratedOption.Identity означает, что значение будет установлено в базе данных при вставке записи.DatabaseGeneratedOption.Computed означает, что значение будет устанавливаться в базе данных при каждом обновлении записи.

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