2013-07-02 105 views
0

我一直在使用nhibernate中的技術,如果我保存父類對象與它相關的子類對象是oso保存。如果我從集合中刪除任何對象,他們也會從db中刪除。nhibernate延遲加載和遞歸保存

但最近我修改了我的代碼以禁用延遲加載,並從此遞歸保存不起作用。

任何人都可以告訴我什麼是我錯過了。我試圖搜索,但我發現的解決方案真的爲我工作。

我有類似下面

public class Class1 
{ 
    public virtual long Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Class2> Class2Seq { get; set; } 
} 
public class Class2 
{ 
    public virtual long Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Class1 Class1Ref{ get; set; } 
} 

的一個映射類是類似於這些

public class Class1Map: ClassMap<Class1> 
{ 
    public Class1Map() 
    { 
     Id(x => x.Id).GeneratedBy.Increment(); 
     Map(x => x.Name); 
     HasMany(x => x.Class2Seq) 
      .KeyColumn("Class1Id") 
      .Not.LazyLoad() 
      .Inverse() 
      .Cascade.All(); 
    } 
} 

public class Class2Map: ClassMap<Class2> 
{ 
    public Class2Map() 
    { 
     Id(x => x.Id).GeneratedBy.Increment(); 
     Map(x => x.Name); 
     References(x => x.Class1Ref).Column("Class1Id").Not.LazyLoad(); 
    } 
} 

回答

0

如果你正在做的事情一樣

parent.Remove(child); 
session.SaveOrUpdate(parent); 
session.Flush() 

您的映射域類需要是:

HasMany(x => x.Class2Seq) 
      .KeyColumn("Class1Id") 
      .Not.LazyLoad() 
      .Inverse() 
      .Cascade.AllDeleteOrphan(); 
+0

好的。但DeleteOrphan是必需的remove()...沒有saveorupdate()應該工作是不是? –

+0

是的,它應該像在parent.add(child)中一樣 - 只要你設置了child.parent –

+0

是的,我設置了child.parent,正如我提到的那樣,它工作得很好,直到我禁用懶惰加載。 –