2010-11-17 90 views
0

我有一個NHibernate的問題。我想要的很簡單: 我有兩個類。 UserTicket和UserData。一個UsertTicket有一定的UserData和的UserData屬於一個UserTicket:NHibernate的一對多的外鍵是NULL

public class UserData{ 
    public virtual int Id { get; set; } 
    public virtual String PDF_Path { get; set; } 

} 

public class UserTicket 
{ 
    public virtual int Ticketnr { get; set; } 
    public virtual IList<UserData> UserData { get; set; } 
} 

而這裏mappig XML:

<class name="UserTicket" table="UserTicket"> 
<id name="Ticketnr"> 
    <generator class="identity"/> 
</id> 
<bag name="UserData" inverse="true" cascade="all-delete-orphan" lazy="false"> 
    <key column="FK_Ticketnr" not-null="false"/> 
    <one-to-many class="UserData" /> 
</bag> 
</class> 




<class name="UserData" table="UserData"> 
    <id name="Id"> 
    <generator class="identity"/> 
    </id> 
    <property name="PDF_Path" /> 
</class> 

當我運行它,它的工作原理,但在DB-表列FK_Ticketnr的UserData總是= NULL。 有人告訴我,我必須做一個從我的孩子(UserData)到父級的反向鏈接。但我不知道如何去做。我如何讓Hibernate將UserTicket的主鍵(Ticketnr)的值寫入FK_Ticketnr?

在此先感謝

回答

4

刪除你的包內的inverse =「true」。這是告訴NHibernate,關係是從UserData映射管理的。由於您沒有反向參考,因此永遠不會持續。另一種選擇是在UserData上放置一個父引用,但如果你不需要它,我不會推薦它。

+0

謝謝!那樣做了。你真的救了我的一天。祝你有個好的一天。 – Naugrim 2010-11-17 19:08:23

2

另一種方法是以下...

public class UserData 
{ 
    // Keep your other properties, add this one too... 
    public virtual UserTicket Ticket { get; set; } 
} 

修改這樣的映射文件...

<class name="UserData" table="UserData"> 
    <id name="Id"> 
     <generator class="identity" /> 
    </id> 
    <property name="PDF_Path" /> 
    <many-to-one name="Ticket" column="FK_Ticketnr" /> 
</class> 

保持inverse="true"放在包裏。

如果採用這種方法,則需要在將UserData對象添加到UserData包時設置Ticket。換句話說,你需要保持雙方的關係。你可以手動執行此操作,或者可以嘗試使用方法或構造函數將它自動化一點。