2011-09-08 68 views
0

據我所知,在使用無狀態會話必須明確地保存的對象關聯(子)更新兒童ForeignKey的使用NHibernate無狀態會話

如果我有以下對象:

public class Parent() 
{ 
    public int Id {get;set;} 
    public string Name {get;set;} 
    public IList<Child> Childs {get;set;} 
} 

public class Child() 
{ 
    public int Id {get;set;} 
    public string Name {get;set;} 
} 

我修改實例父母和一個孩子添加到它,然後我用下面的語句保存父子:

statelesssession.Update(parentInstance); 
statelesssession.Insert(parentInstance.Childs.Last()); 

這樣做可以成功地更新家長和創建是子記錄,但是來自子表的字段Parent_Id保留爲空,因此在那裏不記錄關聯。

如何手動記錄使用無狀態會話的關聯?

回答

0

我在Child上看不到many-to-one屬性,該屬性指向Parent。這就是NHibernate將用於保存Parent_id列的內容。你需要:

public class Child 
{ 
    public int Id {get;set;} 
    public Parent Parent {get;set;} // this is missing 
    public string Name {get;set;} 
} 

......和相應的NHibernate映射。另外,確保在將子項添加到父項時設置值child.Parent

另一件事,鑑於你描述的事件序列(「我創建一個父母的實例,並添加一個孩子」),我希望看到一個Insert父母而不是Update

+0

是的,但我想要的關係是單向的,父母只對子女。我的意思是如何用單向關係來實現這一點。 – aattia

+0

如果您沒有對父類的引用,則至少需要將一個字段映射到子代中的父代ID。就像那時候的任何其他專欄一樣。 –