我一直在使用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();
}
}
答案 0 :(得分:0)
如果您正在做类似
的事情parent.Remove(child);
session.SaveOrUpdate(parent);
session.Flush()
您的映射需要:
HasMany(x => x.Class2Seq)
.KeyColumn("Class1Id")
.Not.LazyLoad()
.Inverse()
.Cascade.AllDeleteOrphan();