NHibernate reference back-对同一实体有多个和引用
我对这种情况有意见:NHibernate reference back-对同一实体有多个和引用,nhibernate,fluent-nhibernate,reference,mapping,Nhibernate,Fluent Nhibernate,Reference,Mapping,我对这种情况有意见: public class Foo { public Foo() { Bars = new List<Bar>(); AddBar(new Bar(this)); } public IList<Bar> Bars {get;private set;} public Bar LastBar {get;private set;} public void AddBar(Ba
public class Foo
{
public Foo()
{
Bars = new List<Bar>();
AddBar(new Bar(this));
}
public IList<Bar> Bars {get;private set;}
public Bar LastBar {get;private set;}
public void AddBar(Bar bar)
{
Bars.Add(bar);
LastBar = bar;
}
}
public class Bar
{
public Bar(Foo foo)
{
BelongsToFoo = foo;
}
public Foo BelongsToFoo {get;private set;}
//...
}
并设置为可空,一切正常,但LastBar当然是空的。我想正确分配和保存最后一个栏
我应该如何正确映射这些实体
编辑1
只有在创建新对象时才会发生这种情况。当我更新Foo并添加新条时,一切正常。确保将列表和多对一引用映射到同一列,并使列表反向
从BelongsToFoo属性中删除NOTNULL约束。NH有时需要存储带有空引用的记录,并在获得引用对象的标识后对其进行更新。使用标识生成器时,这种情况更为频繁。我找到了问题和解决方案 我用于跟踪最后日期和用户更改信息 就我而言,NHibernate需要做: 插入Foo 插入条 更新Foo.LastBar外键 1点。NHibernate调用OnPreInsert,但位于.3。在同一实体上调用OnPreUpdate,但持久化器会丢失有关CreatedAt、CreatedBy属性的信息 我将OnPreUpdate更改为从实体对象显式复制这两个值 PS
我知道例外情况很奇怪,不适合这种情况。不幸的是,我正在这样做:我总是使用HiLo,并且对BelongsToFoo属性没有NOTNULL约束:
var f = new Foo();
Repository.Save<Foo>(f); // -> exception - BelongsToFoo is null
LastBar = bar;