实体框架表每个具体类型的外键

问题描述 投票:0回答:1

我有以下的类层次结构

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创建表?我想有单独的表每个派生类,但没有共同的表。

inheritance entity-framework-5 table-per-class
1个回答
0
投票

在EF核心,modelBuilder.Ignore会做的魔力:

modelBuilder.Ignore<B>();

不知道如果EF 5-6具有类似的功能。

但是:经过后Inheritance with EF Code First - Table per Hierarchy (TPH),你会发现:

这种映射策略是在性能和​​简单性方面成为赢家。这是代表多态性,既多态和非多态查询,表现最好的方式表现良好,而且它甚至很容易通过手工来实现。特设报告可以不复杂的连接或合并。模式演化为简单。

因此,出于性能的原因,也许你可以考虑上面的方法,但它确实取决于你的实际项目。如果你有孩子吨班,然后将其拆分表,因为你想要的。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.