2012-10-22 113 views
0

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

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

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

// 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"); 
    } 
} 
+0

谢谢你,完美地工作! –