2013-07-02 103 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,正如我提到的那样,它工作得很好,直到我禁用懒惰加载。 –