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