如何使用流畅的nhibernate映射连接多个表

时间:2014-07-08 15:02:32

标签: c# nhibernate join fluent-nhibernate

我有一个名为A的实体和一个名为B的实体。有一对多的关系。 B有一个As列表。

B地图:

public BMap()
    {
        Table("TABLE_B");
        Id(x => x.RecId).GeneratedBy.Native();

        Map(x => x.BProp);
        HasMany(x => x.As).LazyLoad().Cascade.All().KeyColumn("B_REC_ID");
    }

A地图:

public AMap()
    {
        Table("TABLE_A");
        Id(x => x.RecId).GeneratedBy.Native();

        Map(x => x.ANumber);
    }

我的任务是返回一个列表,其中包含表a中与表b连接的所有道具。我用新实体创建了一个新的地图,其中包含A和B的所有道具:

扩展A的地图:

public ExtendedAMap()
    {
        Table("TABLE_B");
        ReadOnly();
        Not.LazyLoad();
        Id(c => c.BRecId).Column("REC_ID");
        Map(prop => prop.BNumber);

        Join(
            "TABLE_A",
            join =>
            {
                join.KeyColumn("B_REC_ID");
                join.Map(x => x.ANumber);
            });
    }

瞧它有效! : - )

但我现在的问题是我必须加入更多的桌子而且我不知道应该如何实现它: 属于A和B的实体实际上是具有公共数据的抽象类。现在,我还需要返回这些表的所有道具......

B的子类的地图:

public class Type1OfBMap : SubclassMap<B>
{
    public Type1OfBMap()
    {
        Table("TABLE_B_1");
        KeyColumn("B_REC_ID");
        Map(x => x.AdditionalPropB1);
    }
}

表A相同:

public class Type1OfAMap : SubclassMap<A>
{
    public Type1OfAMap()
    {
        Table("TABLE_A_1");
        KeyColumn("A_REC_ID");
        Map(x => x.AdditionalPropA1);
    }
}

A和B中存在更多的子类。我需要在我的扩展实体中使用其中的许多子类。 我不知道如何在地图上加入他们。我想使用sql语句,但我需要一张地图,因为我的列表必须使用标准,订单描述,分页过滤器等进行过滤

感谢您的想法!

0 个答案:

没有答案
相关问题