FluentNHibernate - 将外键映射为主键

时间:2012-10-22 10:56:37

标签: c# fluent-nhibernate fluent-nhibernate-mapping

您好我正在尝试将数据库迁移到ORM,并发现了一个问题。数据库是使用继承的概念创建的,其中有一个父表和几个继承其属性的子表。为了便于使用INNER JOIN查询,所有子表仅包含对父表的标识的引用(同时是外键的外键)。遵循模型:

BaseDocument
{
    Id : Long
    ...
}

AdministrativeDocument
{
    Id : Long (PK), (FK : BaseDocument(Id))
    ...
}

PropositionDocument
{
    Id : Long (PK), (FK : BaseDocument(Id))
    ...
}

ProjectDocument
{
    Id : Long (PK), (FK : BaseDocument(Id))
    ...
}

我的问题是:有没有办法创建一个映射,其中外键也是FluentNHibernate中使用C#的主键,或者我是否必须为每个表创建单独的主键?

1 个答案:

答案 0 :(得分:1)

每个类的继承层次结构都有一个标准的表。只需将其映射为

即可
// inherit
class AdministrativeDocument : Document { }

// base class mapping
class DocumentMap : ClassMap<Document>
{
    public DocumentMap()
    {
        Id(x => x.Id, "Id")...;
    }
}

// subclass mapping, same for all three subtables
class AdministrativeDocumentMap : SubclassMap<AdministrativeDocument>
{
    public AdministrativeDocumentMap()
    {
        KeyColumn("Id");
    }
}