Свободно генерируемые столбцы NHibernate и присвоенные идентификаторы

Я использую Fluent NHibernate для сохранения данных в веб-приложении.

Моя проблема ... У меня есть базовый класс, который отображает все сущности со свойством ID типа T (почти всегда int или GUID) с помощью GeneratedBy (). Identity ()

При запуске приложения у меня есть программа начальной загрузки, которая проверяет и проверяет, заполнены ли необходимые исходные данные. Моя проблема в том, что некоторые из заполняемых исходных данных требуют определенного идентификатора. (Идентификаторы, которые соответствовали бы перечислению или системному пользователю)

Есть ли способ заставить NHibernate зафиксировать запись, используя идентификатор, указанный I, а не автоматически сгенерированный? Любые другие коммиты в репозиторий после этого могут быть автоматически сгенерированы.


person Adam    schedule 19.02.2011    source источник


Ответы (2)


Id(x => x.Id).GeneratedBy.Assigned();

Если вы хотите, чтобы приложение назначало идентификаторы (в отличие от того, чтобы NHibernate их генерировал), вы можете использовать назначенный генератор. Этот специальный генератор будет использовать значение идентификатора, уже присвоенное свойству идентификатора объекта. Будьте очень осторожны при использовании этой функции для присвоения клавишам бизнес-значения (почти всегда ужасное дизайнерское решение).

Из-за своей внутренней природы сущности, которые используют этот генератор, не могут быть сохранены с помощью метода SaveOrUpdate() ISession. Вместо этого вы должны явно указать NHibernate, следует ли сохранять или обновлять объект, вызывая метод Save() или Update() из ISession.

http://nhibernate.info/doc/nhibernate-reference/mapping.html#mapping-declaration-id-assigned

person meir    schedule 18.03.2011

ты можешь использовать

Id(I => I.Id).GeneratedBy.Increment(); //Increment by 1
person gsahoo    schedule 16.09.2011