2009-08-28 44 views
0

我不明白爲什麼NHibernate試圖插入父對象 - 當行已經​​存在於數據庫中 - 當我插入子行時。Nhibernate - 爲什麼插入子代時試圖插入現有父行

父映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true"> 
<class name="ReportDistribution.Client.ReportMgr.Model.ClientReport, ReportDistribution.Client.ReportMgr.Model" 
    table="ClientReport" 
    lazy="false" 
    dynamic-update="true"> 
<id name="Id" access="property" column="ReportID"> 
    <generator class="assigned"></generator> 
</id> 
<property name="MaxAge" access="property" /> 
<property name="DeleteUnread" access="property" /> 
<property name="Description" access="property" /> 
<property name="Name" access="property" /> 
<bag name="ClientPublications" cascade="all" lazy="false"> 
    <key column="ReportID" /> 
    <one-to-many class="ReportDistribution.Client.ReportMgr.Model.ClientPublication, ReportDistribution.Client.ReportMgr.Model" />   
</bag> 
</class> 
</hibernate-mapping> 

兒童映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true"> 
<class name="ReportDistribution.Client.ReportMgr.Model.ClientPublication, ReportDistribution.Client.ReportMgr.Model" 
    table="ClientPublication" 
    lazy="false" 
    dynamic-update="true"> 
<id name="Id" access="property" column="PublicationID"> 
    <generator class="assigned"></generator> 
</id> 
<property name="CreatedOn" access="property" type="DateTime"></property> 
<property name="IsMarkedForDeletion" access="property"></property> 
<property name="IsDeleted" access="property"></property> 
<property name="HasBeenRead" access="property"></property> 
<property name="ReceivedOn" access="property" type="DateTime"></property> 
<property name="FileExtension" access="property"></property> 
<property name="IsDownloaded" access="property"></property> 
<property name="MustRead" access="property"></property> 
<many-to-one  
    name="Report" 
    class="ReportDistribution.Client.ReportMgr.Model.ClientReport, ReportDistribution.Client.ReportMgr.Model" 
    lazy="false" 
    column="ReportID"> 
</many-to-one> 
</class> 
</hibernate-mapping> 

父類(報告)的屬性是子類的集合。 Child類(Publication)擁有屬於父對象的屬性。

在此先感謝....

+0

您是否嘗試過在ClientPublications包中放置inverse = true? – Rashack 2009-08-28 13:18:38

+0

我得到一個ADOException,因爲它將NULL插入到PublicationId列中。 – empo 2009-08-28 14:08:44

+0

對不起,忽略最後一條評論是因爲我會將id生成器更改爲「native」。 – empo 2009-08-28 14:12:33

回答

0

這聽起來好像父對象不再連接到會話時要保存的孩子。 HNibernate跟蹤連接到會話的實體的狀態,但是如果實體變得分離,它將失去跟蹤狀態的能力。

想想這樣 - 如果一個實體沒有通過你正在使用的ISession的確切實例,那麼它不知道它存在。因此,它將所有從未被視爲「新」的事物視爲對待。

一個選項可能是使用ISession.Load(entity);在保存前重新加載父母。