У меня есть объект User, который в качестве одного из свойств содержит свойство Photos, которое относится к типу IList.
Таблицы в базе данных SQL объединяются внешним ключом. т.е.
Таблица User {userid long NOT NULL .......}
Таблица UserPhoto {photoid long NOT NULL, userid long, ненулевые ссылки [User] .UserId ........}
Таким образом, вы не можете вставить строку в фото пользователя без соответствующей строки пользователя.
То, что я хочу сделать, это создать пользовательский объект в коде, добавить список объектов UserPhoto (который должен обязательно содержать пустой идентификатор пользователя, так же как и объект пользователя, поскольку он не был сохранен и создан). по идентификатору вставьте еще)
Мои отображения таковы:
<class name="User" table="[User]">
<id name="UserId" column="Id">
<generator class="identity" />
</id>
<bag name="Photos" order-by="DisplayOrder asc" cascade="all">
<key column="UserId" />
<one-to-many class="UserPhoto" />
</bag>
</class>
<class name="UserPhoto" table="UserPhoto">
<id name="PhotoId" column="Id">
<generator class="identity" />
</id>
<property name="UserId" />
</class>
Но когда я пытаюсь сохранить объект User с помощью Nhibernate Session.Save (пользователь), он выдает ошибку о том, что ограничение внешнего ключа не выполнено. Так что я угадываю, что он пытается вставить либо пользовательские фотографии в список перед пользовательской таблицей, ИЛИ не устанавливать вновь созданное свойство идентификатора пользователя на фотографиях и пытается сохранить их с нулевым идентификатором пользователя.
Нужно ли иметь что-то дополнительное в отображении, чтобы показать, что это столбец внешнего ключа и к чему он применяется, поэтому nhibernate знает, как вставить зависимые строки в правильном порядке, чтобы я мог выполнить это за одну вставку?