nhibernate延迟加载和递归保存

时间:2013-07-02 05:45:26

标签: fluent-nhibernate lazy-loading

我一直在使用nhibernate中的技术,如果我保存父类对象,则保存与之相关的子类对象。如果我从集合中删除任何对象,他们也会从db中删除。

但是最近我修改了我的代码以禁用延迟加载,从那时起递归保存不起作用。

任何人都可以告诉我,我错过了什么。我试图搜索,但我发现的解决方案真的很适合我。

我的域类类似于下面的

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();
    }
}

1 个答案:

答案 0 :(得分:0)

如果您正在做类似

的事情
parent.Remove(child);
session.SaveOrUpdate(parent);
session.Flush()

您的映射需要:

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