Свободные столбцы сгенерированного и назначенного идентификатора - PullRequest
12 голосов
/ 19 февраля 2011

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

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

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

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

Ответы [ 2 ]

27 голосов
/ 18 марта 2011
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

1 голос
/ 16 сентября 2011

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

Id(I => I.Id).GeneratedBy.Increment(); //Increment by 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...