在Fluent NHibernate中使用继承的映射修改数据库结构

时间:2015-08-28 10:35:54

标签: c# nhibernate fluent-nhibernate subclass

我有三个对象A,B和City,其中B继承A。

A包含此结构的ID和名称。

internal class AMap : ClassMap<A>
{
    internal AMap()
    {
        Id(x => x.ID).GeneratedBy.Assigned().Not.Nullable();
        Map(x => x.Name).Length(255);
        Table("A");
    }
}

B应该是一个包含城市对象列表的扩展对象

internal class BMap : SubclassMap<B>
{
    internal BMap()
    {
        HasManyToMany(x => x.Cities).Not.LazyLoad().AsBag().Table("B").Cascade.All();
    }
}

这应该导致以下数据库结构
Table A: - ID - Name

Table B: - ID_A - ID_City

它应该是ManyToMany关系,因此表B中可以多次出现ID_A和ID_City

如何在Fluent NHibernate映射中实现此结构?

谢谢, 异种

1 个答案:

答案 0 :(得分:0)

我能够解决这个问题,所以这是头痛的结果:

internal class AMap : ClassMap<A>
{
    internal AMap()
    {
        Id(x => x.ID).GeneratedBy.Assigned().Not.Nullable();
        Map(x => x.Name).Length(255);

        Map(x => x.Type).Column("ObjType");
        DiscriminateSubClassesOnColumn(@"Type");

        Table("A");
    }
}

internal class BMap : SubclassMap<B>
{
    internal BMap()
    {
        HasManyToMany(x => x.Cities).Not.LazyLoad().AsBag().Table("B").Cascade.All();
    }
}

我添加了一个Type字段,用于标识每个子类,然后DiscriminateSubClassesOnColumn将对象的Type-Information存储在A表中。

B-Table不再存在,但B类的每个对象都有一个映射表,它的城市对象

相关问题