C# FluentNHibernate-将外键映射为主键

C# FluentNHibernate-将外键映射为主键,c#,fluent-nhibernate,fluent-nhibernate-mapping,C#,Fluent Nhibernate,Fluent Nhibernate Mapping,嗨,我正在尝试将数据库迁移到ORM,发现了一个问题。数据库是用继承的概念创建的,其中有一个父表和几个继承其属性的子表。为了便于使用内部联接进行查询,所有子表只包含对父表标识的引用(同时是主键的外键)。遵循以下模式: BaseDocument { Id : Long ... } AdministrativeDocument { Id : Long (PK), (FK : BaseDocument(Id)) ... } PropositionDocument {

嗨,我正在尝试将数据库迁移到ORM,发现了一个问题。数据库是用继承的概念创建的,其中有一个父表和几个继承其属性的子表。为了便于使用内部联接进行查询,所有子表只包含对父表标识的引用(同时是主键的外键)。遵循以下模式:

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#的主键,或者我必须为每个表创建单独的主键?

每个类继承层次结构都有一个标准表。把它画成那样就行了

// 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");
    }
}
//继承
类管理文档:文档{}
//基类映射
类文档映射:类映射
{
公共文档地图()
{
Id(x=>x.Id,“Id”)。。。;
}
}
//子类映射,三个子表相同
类管理文档映射:子类映射
{
公共管理文档地图()
{
键列(“Id”);
}
}