Свободные столбцы Идентифицированные И Иерархии с NHibernate

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

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

Id(I => I.Id).GeneratedBy.Increment(); //Increment by 1