【发布时间】:2013-08-05 08:17:24
【问题描述】:
我有以下类层次结构
public class A
{
public int Id { get; set; }
public virtual IColection<B> Items {get; set; }
}
public abstract class B
{
public int Id {get; set; }
public A Parent {get; set; }
}
public class C : B
{
public String Name {get; set; }
}
我正在尝试使用每个具体类型层次结构映射的 Table 以及 DataContext 的以下代码
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<C>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("C_Table");
});
}
Entity Framework 仍然创建两个表。一个用于 B 类,包括外键的 Id 和 A_Id 字段。 C 的第二个,除了对 A 的引用之外的所有字段。
是否可以配置EF不为B创建表?我希望每个派生类都有单独的表,但没有公用表。
【问题讨论】:
-
那么为什么 B 是抽象的?
-
因为 A 有 B 项,所以它需要一张可以查询其子项的表。 EF 不能通过
unioning 多个子表来查询子表。无论如何这都是一个问题,因为现在您必须确保每个派生类都有自己的 PK 范围,因此 B 中的 PK 是唯一的。
标签: inheritance entity-framework-5 table-per-class