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;