所以是新爲此事NHibernate和流利NHibernate的,我有一些困惑與映射和級聯變化到子對象。功能NHibernate級聯產生,而不是更新他們的新記錄
我有了幾個集合,當我創建一個新的對象它創建的子對象,並將其插入到各自的表一個對象。這很好,很好。然而,當我用表面上的子對象變化來更新父對象時,它會以我想要的方式流動。踢球者是,當看着數據庫我看到,而不是更新子對象記錄,它已經插入新記錄,並從原始記錄中刪除與父對象的關聯,而不僅僅是更新它們。
要增加我們使用自動映射和MappingOverrides額外的解釋。所以這裏簡要介紹一下我正在使用的代碼。
public class ParentObjectOverride : IAutoMappingOverride<ParentObject>
{
public void Override(AutoMapping<ParentObject> mapping)
{
mapping.HasMany(x => x.Chid1).Cascade.SaveUpdate().Table("chid1Table");
mapping.HasMany(x => x.Child2).Cascade.SaveUpdate().Table("child2Table");
}
}
public class Child1Override : IAutoMappingOverride<Child1>
{
public void Override(AutoMapping<Child1> mapping)
{
mapping.References(x => x.ParentObject).Cascade.All();
}
}
public class Child2Override : IAutoMappingOverride<Child2>
{
public void Override(AutoMapping<Child2> mapping)
{
mapping.References(x => x.ParentObject).Cascade.All();
}
}
確實沒有一種情況,子對象獨立地保存在ParentObject中。我試過cascade.all()以及cascade.saveupdate()都產生相同的結果。
我讀過幾個職位有關使用AllDeleteOrphan,但我不明白爲什麼它不應該只是更新子行,而不是製造新的行並刪除舊的。也許我只是不明白映射的概念。
任何援助表示讚賞
你確定你的Clild記錄有當您保存父項ID? – Peter 2012-08-02 08:33:24
是的,如果Child記錄是新的,則id爲0,並且nhibernate在插入時分配id。如果子記錄正在更新,它將傳遞記錄標識作爲父應該保存的子記錄集合的一部分 – TroyB 2012-08-06 17:39:50