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

Modifying database structure with inherited mappings in Fluent NHibernate

我有三个对象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 应该是包含 City 对象列表的扩展对象

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

应该是多对多关系,所以ID_A和ID_City可以在TableB

中出现多次

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

谢谢, 异种

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

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-Table.

B-Table 不存在了,但是类型 B 的每个对象都有一个映射 table 到它的 City-Objects