我正在使用EF5 Code-first和实体类,如下所示:
public class Base {
public int Id { get; set; }
}
public class Derived : Base { // there are other derived types as well
}
然后我按如下方式配置派生实体:
var config = new EntityTypeConfiguration<Base>();
config.Map<Derived>(m =>
{
m.MapInheritedProperties();
m.ToTable("derived");
});
DbModelBuilder modelBuilder = ...
modelBuilder.Configurations.Add(config);
在我的申请中,我随后致电:
new MyDbContext().Set<Derived>().First();
此次通话的预期行为是什么?
奇怪的是,对于以完全相同的方式配置的层次结构,我似乎得到了不一致的行为。有时这会失败,因为它尝试查询“dbo.Base”,有时它会正确查询“dbo.Derived”。
答案 0 :(得分:0)
EF派生类型映射的默认值是Table per Hierarchy。您可以获得blog
上的所有默认值在你的基础表上有一个名为&#34; Discriminator&#34;的新字段。将添加添加所有字段的derive类型将在数据库中创建一个可空列。
在你的情况下,这应该是TPT,所以表格&#34; base&#34;将包含基类的所有字段和表&#34; derived&#34;将包含派生类的所有字段。两个表都有一个共享主键。
来自博客: 表示继承层次结构有三种不同的方法:
每个树情景都有优点和缺点,Morteza Manavi's blog
中有很好的描述