我的数据库中有两个表:
"基金"实体从"BaseEtity"继承"每种类型的表".
在我的商业模式中,我有不同类型的"基金":
我想为那些具有"每个层次结构的表"的类型使用不同的实体,这意味着我仍然只有一个带有类型鉴别器列的"基金"表.
有没有办法在一个实体上获得"每个层次结构的表",该实体派生自具有"每种类型的表"的基类?
我有一个使用现有数据库的应用程序,目前使用NHibernate作为O/R-Mapper.
现在,我需要使用Code First和Fluent API Configuration迁移到Entity Framework 6.1.1.
但是现在我对部分数据模型有问题,因为它使用不同类型的继承策略(TPT和TPH)
注意:在这里发布完整的数据模型对我来说似乎有点太大了,所以我在一个小的POC程序中重现了我面临的问题.
CLASS | TABLE | TYPE
-----------------------+--------------------+------
BaseEntity (abstract) | BaseTable |
Inherited_TPH | BaseTable | 1
Inherited_TPT | Inherited_TPT | 2
Run Code Online (Sandbox Code Playgroud)
调用表中用作描述符的列 Type
根据这个答案,我添加了一个抽象类Intermediate_TPH作为中间层:

一些示例数据:带有ID=3类型的条目Inherited_TPT

这些是我的实体类和我的上下文类:
class MyContext : DbContext
{
public MyContext ( string connectionString )
: base ( connectionString )
{
}
public DbSet<Inherited_TPH> TPH_Set { get; set; }
public DbSet<Inherited_TPT> …Run Code Online (Sandbox Code Playgroud) c# inheritance entity-framework ef-code-first entity-framework-6
首先,这些问题类似,但绝对不一样:
我可以在实体框架中混合每个层次结构的表和每种类型的表吗? - 指的是另一种情况.
实体框架:每个类型的混合表和每个层次结构的表 - 另一种情况,尽管接受第一个方案的答案与它无关(*).
(*)其次,当使用每个实体的表映射基本实体时,我在实体框架中成功地混合了每个类型的表和每个层次的表,并且该表具有每个层的表的鉴别符在链条下方.
我试图映射以下内容:
表:
BaseTable
{
int PK1;
int PK2;
string? Value1;
double? Value2;
}
ChildTable3
{
int PK1;
int PK2;
int Value;
}
Run Code Online (Sandbox Code Playgroud)
实体:
abstract BaseEntity : class // Maps to BaseTable
{
int PK1; // Maps to PK1 in relevant table
int PK2; // Maps to PK2 in relevant table
}
Entity1 : BaseEntity // Maps to BaseTable when Value1 != null
{
string Value; // Maps to Value1
}
Entity2 : …Run Code Online (Sandbox Code Playgroud) entity-framework table-per-type entity-framework-4 table-per-hierarchy