【问题标题】:FluentNHibernate - Map Foreign Key As Primary KeyFluentNHibernate - 将外键映射为主键
【发布时间】:2025-12-30 09:10:11
【问题描述】:

您好,我正在尝试将数据库迁移到 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))
    ...
}

我的问题是:有什么方法可以使用 C# 在 FluentNHibernate 中创建一个外键也是主键的映射,还是我必须为每个表创建单独的主键?

【问题讨论】:

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


    【解决方案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");
        }
    }
    

    【讨论】: