我有以下的类层次结构
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; }
}
我试图用每个具体类型层次映射表,下面的代码的DataContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<C>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("C_Table");
});
}
实体框架还创建了两个表。一为B类,包括外键Id和A_ID领域。第二个对C与各界除了参考A.
是否有可能配置EF不是为b创建表?我想有单独的表每个派生类,但没有共同的表。
在EF核心,modelBuilder.Ignore
会做的魔力:
modelBuilder.Ignore<B>();
不知道如果EF 5-6具有类似的功能。
但是:经过后Inheritance with EF Code First - Table per Hierarchy (TPH),你会发现:
这种映射策略是在性能和简单性方面成为赢家。这是代表多态性,既多态和非多态查询,表现最好的方式表现良好,而且它甚至很容易通过手工来实现。特设报告可以不复杂的连接或合并。模式演化为简单。
因此,出于性能的原因,也许你可以考虑上面的方法,但它确实取决于你的实际项目。如果你有孩子吨班,然后将其拆分表,因为你想要的。