Fluent nhibernate nhibernate延迟加载和递归保存

Fluent nhibernate nhibernate延迟加载和递归保存,fluent-nhibernate,lazy-loading,Fluent Nhibernate,Lazy Loading,我一直在使用nhibernate中的技术,其中如果保存父类对象,则与之相关的子类对象将被保存。如果我从集合中删除任何对象,它们也会从数据库中删除 但是最近我修改了我的代码来禁用延迟加载,从那以后递归保存就不起作用了 谁能告诉我我错过了什么。我试着去寻找,但我找到的解决办法对我来说并不奏效 我有一个类似于下面的域类 public class Class1 { public virtual long Id { get; set; } public virtual string Nam

我一直在使用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; }
}
公共类1
{
公共虚拟长Id{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟IList Class2Seq{get;set;}
}
公共课2
{
公共虚拟长Id{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟Class1 ClassRef{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();
    }
}
公共类ClassMap:ClassMap
{
公共地图()
{
Id(x=>x.Id).GeneratedBy.Increment();
Map(x=>x.Name);
HasMany(x=>x.Class2Seq)
.KeyColumn(“classaid”)
.Not.LazyLoad()
.Inverse()
.Cascade.All();
}
}
公共类Class2Map:ClassMap
{
公共类2Map()
{
Id(x=>x.Id).GeneratedBy.Increment();
Map(x=>x.Name);
引用(x=>x.classref).Column(“classaid”).Not.LazyLoad();
}
}

如果您正在执行以下操作

parent.Remove(child);
session.SaveOrUpdate(parent);
session.Flush()
您的映射需要:

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

好啊但是remove()需要删除孤儿。。。如果没有这一点,saveorupdate()应该可以工作,不是吗?是的,它应该可以工作,就像在parent.add(child)中一样-只要您设置了child.parentYes,我已经设置了child.parent,而且正如我提到的,它工作得非常好,直到我禁用了延迟加载。我以前遇到过一个问题,当集合没有通过左连接获取时,集合没有正确初始化-您能添加一个.Fetch.join()吗我尝试添加.Fetch.Join(),但这会导致在其他位置提取重复记录。