Каскадная вставка на один ко многим с беглым NHibernate - PullRequest
1 голос
/ 21 сентября 2010

У меня есть два класса, сопоставленные с использованием беглого NHibernate - User и UserRoleAssignment.Пользователь имеет много UserRoleAssignments.Вот соответствующая карта для пользователя:

HasMany(x => x.Roles)
.Table("UserRoleMap")
.Cascade.SaveUpdate();

А для UserRoleAssignment:

Map(x => x.User_Id);

Как видите, я ссылаюсь только от User на UserRoleAssignment.Из UserRoleAssignment я только сопоставляю столбец внешнего ключа (User_Id).Проблема в том, что когда я сохраняю пользователя, я получаю исключение, вызванное ограничением внешнего ключа, потому что NHibernate вставляет 0 в значение для свойства User_id.Это происходит только для новых пользователей - существующих пользователей (у которых уже есть идентификатор), работает нормально.

Итак, вопрос в том, как я могу убедиться, что NHibernate устанавливает значение User_Id на идентификатор, сгенерированный при вставкеновый пользователь?

Большое спасибо!

1 Ответ

0 голосов
/ 21 сентября 2010

Это задокументировано в http://nhibernate.info/doc/nh/en/index.html#collections-onetomany:

Очень важное примечание: Если столбец <key> ассоциации <one-to-many> объявлен NOT NULL, NHibernate может вызватьнарушения ограничений при создании или обновлении ассоциации.Чтобы предотвратить эту проблему, необходимо использовать двунаправленную ассоциацию с многозначным концом (набором или сумкой), помеченным как inverse="true".См. Обсуждение двунаправленных ассоциаций далее в этой главе.

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