多个HasMany关系中表的Fluent NHibernate映射

多个HasMany关系中表的Fluent NHibernate映射,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,下面的类映射有什么问题 public class Foo { public Foo() { ActualCurve = new List<Point>(); TargetCurve = new List<Point>(); } public virtual int Id { get; set; } public virtual string Name { get; set; } public

下面的类映射有什么问题

public class Foo
{
    public Foo()
    {
        ActualCurve = new List<Point>();
        TargetCurve = new List<Point>();
    }
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<Point> ActualCurve { get; set; }
    public virtual IList<Point> TargetCurve { get; set; }
}

public class Point
{
    public virtual int Id { get; set; }
    public virtual double X { get; set; }
    public virtual double Y { get; set; }
}

public class FooMapping() : ClassMap<Foo>
{
    Table("Foos");
    Id(x => x.Id).GeneratedBy.Identity();
    Map(x => x.Name).Not.Nullable();
    HasMany(x => x.ActualCurve ).Cascade.All();
    HasMany(x => x.TargetCurve ).Cascade.All();
}

public class PointMapping() : ClassMap<Point>
{
    Table("Points");
    Not.LazyLoad();
    Id(x => x.Id).GeneratedBy.Identity();
    Map(x => x.X).Not.Nullable();
    Map(x => x.Y).Not.Nullable();
}

本质上,问题在于,当我将持久化的Foo对象从数据库中拉回来时,Foo.ActualCurve和Foo.TargetCurve列表都会被这两个列表的组合内容填充。很明显,没有一列可以确定哪些点集属于Foo中的正确曲线,但我不确定如何更改映射以保持两个不同的点集。

我认为您需要为引用指定一个单独的列:

HasMany(x => x.ActualCurve ).Cascade.All().KeyColumn("ActualCurveId");
HasMany(x => x.TargetCurve ).Cascade.All().KeyColumn("TargetCurveId");

EDIT:Column->KeyColumn

不是您不必将表映射到类的要点。为什么不使用内置功能?
HasMany(x => x.ActualCurve ).Cascade.All().KeyColumn("ActualCurveId");
HasMany(x => x.TargetCurve ).Cascade.All().KeyColumn("TargetCurveId");