Возможно, более практичный пример? Где у вас есть такая структура объекта:
E-mail
--EmailId
--EmailProperty1
--AttachmentCollection
Приложение
--AttachmentId
--ParentEmail
--AttachmentProperty1
сопоставлен со структурой таблицы следующим образом (не так, как я бы назвал, но это, например):
Адрес электронной почты
--emailId int PK, личность
--emailProp1 varchar (50)
emailattachment
--attachmentId int PK, личность
--emailId int, FK to email table
--attachmentProp1 varchar (50)
<hibernate-mapping>
<class name="Email" table="email">
<id name="EmailId">
<!-- this tells NHibernate to use DB to generate id -->
<generator class="native"/>
</id>
<property name="EmailProperty1" column="emailProp1"/>
<bag name="AttachmentCollection" lazy="true" inverse="true">
<key column="emailId"/>
<one-to-many class="Foo.Emails.Attachment, Foo.Emails"/>
</bag>
</class>
<class name="Attachment" table="emailattachment">
<id name="AttachmentId">
<generator class="native"/>
</id>
<property="AttachmentProperty1" column="attachmentProp1"/>
<many-to-one name="ParentEmail" class="Foo.Emails.Email, Foo.Emails" lazy="proxy" column="emailId">
</class>
</hibernate-mapping>
На этой карте вы получите двунаправленное отношение, и этот тег генератора сообщает nhibernate, что объекты со свойством null Id (вы также можете указать другое «несохраненное значение»), затем вставляете объект, остальное обновление. Должно исправить вашу текущую проблему.
Пара других вещей: внимательно изучите, какие контейнеры вам нужно использовать при отображении (пакет против набора или списка). В hibernatingrhino NHibernateFAQ .
есть отличная рецензия.
Кроме того, поскольку вы новичок в NHibernate, я очень и очень рекомендую лето скринкастов nhibernate . Лучший инструмент, который я нашел до сих пор для изучения.