Entity framework 实体框架代码第一个TPH重复/冗余鉴别器列?

Entity framework 实体框架代码第一个TPH重复/冗余鉴别器列?,entity-framework,ef-code-first,Entity Framework,Ef Code First,我已经按照接受的答案ThisSO链接为多种类型创建了一个名为Entities of TPH的表 protected override void OnModelCreating(DbModelBuilder modelbuilder) { modelbuilder.Conventions.Remove<PluralizingTableNameConvention>(); // Example of controlling TPH iheritance: mod

我已经按照接受的答案ThisSO链接为多种类型创建了一个名为Entities of TPH的表

protected override void OnModelCreating(DbModelBuilder modelbuilder)
{
    modelbuilder.Conventions.Remove<PluralizingTableNameConvention>();

    // Example of controlling TPH iheritance:
    modelBuilder.Entity<PaymentComponent>()
            .Map<GiftPaymentComponent>(m => m.Requires("MyType").HasValue("G"))
            .Map<ClubPaymentComponent>(m => m.Requires("MyType").HasValue("C"));
模型创建时受保护的覆盖无效(DbModelBuilder modelbuilder)
{
modelbuilder.Conventions.Remove();
//控制TPH I持续性的示例:
modelBuilder.Entity()
.Map(m=>m.Requires(“MyType”).HasValue(“G”))
.Map(m=>m.Requires(“MyType”).HasValue(“C”);
该应用程序实际上运行良好。然而,在表实体中,虽然“MyType”列包含诸如“G”和“C”之类的鉴别器,但是存在一个包含数据(未定义)的列“鉴别器”

如果我有流畅的API代码,如: .Map(m=>m.Requires(“鉴别器”).HasValue(“G”)) .Map(m=>m.Requires(“鉴别器”).HasValue(“C”)

然后在表“Entities”中,冗余列现在命名为“Discriminator1”

以下是我的真实流畅API代码:

public DbSet<Dealer> Dealers { get; set; }
public DbSet<Customer> Customers { get; set; }
public DbSet<Entity> Entities { get; set; }
public DbSet<BizEntity> BusinessEntities { get; set; }

public DbSet<Person> People { get; set; }
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    //Table per inheritence
    modelBuilder.Entity<Entity>()
        .Map<Customer>(d => d.Requires("Discriminator").HasValue("C"))
        .Map<Dealer>(d => d.Requires("Discriminator").HasValue("D"))
        .Map<Person>(d => d.Requires("Discriminator").HasValue("P")).ToTable("Entities");
公共数据库集交易商{get;set;}
公共数据库集客户{get;set;}
公共数据库集实体{get;set;}
公共数据库集BusinessEntities{get;set;}
公共数据库集人物{get;set;}
modelBuilder.Conventions.Remove();
//表每继承
modelBuilder.Entity()
.Map(d=>d.Requires(“鉴别器”).HasValue(“C”))
.Map(d=>d.Requires(“鉴别器”).HasValue(“d”))
.Map(d=>d.Requires(“鉴别器”).HasValue(“P”).ToTable(“实体”);
个人、客户和经销商是具体的类,实体和业务实体是抽象的

如何在没有多余的discriminator列的情况下拥有合适的TPH?

UPD:我也有同样的问题。 您可以通过添加第三个选项删除redurant鉴别器,如:

modelBuilder.Entity<PaymentComponent>()
          .Map<GiftPaymentComponent>(m => m.Requires("MyType").HasValue("G"))
          .Map<ClubPaymentComponent>(m => m.Requires("MyType").HasValue("C"));
          .Map<SomePaymentComponent>(m => m.Requires("MyType").HasValue("S"));
modelBuilder.Entity()
.Map(m=>m.Requires(“MyType”).HasValue(“G”))
.Map(m=>m.Requires(“MyType”).HasValue(“C”);
.Map(m=>m.Requires(“MyType”).HasValue(“S”);
“鉴别器”一栏消失了。 我认为这是EF的一个缺陷