C# Fluent-NHibernate中的一对多映射与复合id

C# Fluent-NHibernate中的一对多映射与复合id,c#,fluent-nhibernate,nhibernate-mapping,composite-key,C#,Fluent Nhibernate,Nhibernate Mapping,Composite Key,我在两侧使用复合键的一对多映射方面遇到问题 以下是我到目前为止的情况: public class OneSide { public virtual int A { get; set; }//-A,B,C,D together form primary key public virtual int B { get; set; } public virtual int C { get; set; } public virtual int D { get; set; }

我在两侧使用复合键的一对多映射方面遇到问题

以下是我到目前为止的情况:

public class OneSide
{
    public virtual int A { get; set; }//-A,B,C,D together form primary key
    public virtual int B { get; set; }
    public virtual int C { get; set; }
    public virtual int D { get; set; }
    public virtual int OtherData { get; set; }
    public virtual IList<ManySide> Ls { get; set; }
}

public class OneSideMap : ClassMap<OneSide>
{
    public OneSideMap()
    {
        LazyLoad();

        CompositeId().KeyProperty(x => x.A).KeyProperty(x => x.B).KeyProperty(x => x.C).KeyProperty(x => x.D);

        Map(x => x.OtherData).Not.Nullable();
        HasMany(x => x.Ls).KeyColumns.Add("A", "B", "C", "D").Inverse().Cascade.All();
    }
}

public class ManySide
{
    public virtual OneSide OneSide { get; set; }
    public virtual int A { get; set; }//-A,B,C,D,E together form primary key
    public virtual int B { get; set; }
    public virtual int C { get; set; }
    public virtual int D { get; set; }
    public virtual int E { get; set; }
    public virtual int OtherData2 { get; set; }
}

public class ManySideMap : ClassMap<ManySide>
{
    public ManySideMap()
    {
        LazyLoad();

        CompositeId().KeyReference(x => x.A).KeyReference(x => x.B).KeyReference(x => x.C).KeyReference(x => x.D).KeyProperty(x => x.E);

        Map(x => x.OtherData2).Not.Nullable();
        References(x => x.OneSide).Columns("A", "B", "C", "D").Cascade.All();
    }
}

我知道这是不正确的,我现在不知道什么是错误的,因为我已经开始学习NHibernate像几个小时前。有人能指出我代码中的错误吗?

对单侧的引用必须是键引用,因为不能两次映射列

public class ManySideMap : ClassMap<ManySide>
{
    public ManySideMap()
    {
        LazyLoad();

        CompositeId()
            .KeyReference(x => x.OneSide, "A", "B", "C", "D")
            .KeyProperty(x => x.E);

        Map(x => x.OtherData2).Not.Nullable();
    }
}
公共类ManySideMap:ClassMap
{
公共管理地图()
{
懒散的负荷();
复合ID()
.KeyReference(x=>x.one边,“A”、“B”、“C”、“D”)
.KeyProperty(x=>x.E);
Map(x=>x.OtherData2).Not.Nullable();
}
}
从ManySide访问列B与
manysideObj.OneSide.B
一样简单,只要您只访问构成主键的单侧属性,它甚至不必加载单侧属性

public class ManySideMap : ClassMap<ManySide>
{
    public ManySideMap()
    {
        LazyLoad();

        CompositeId()
            .KeyReference(x => x.OneSide, "A", "B", "C", "D")
            .KeyProperty(x => x.E);

        Map(x => x.OtherData2).Not.Nullable();
    }
}