【问题标题】:Entity Framework Code First TPH duplicate/redundent Discriminator column?实体框架代码优先TPH重复/冗余鉴别器列?
【发布时间】:2014-11-04 02:37:30
【问题描述】:

我已按照此 SO 链接 Entity Framework: How to avoid Discriminator column from table? 接受的答案为多种类型创建名为 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"));

该应用程序实际上运行良好。但是,在表实体中,虽然“MyType”列包含“G”和“C”等鉴别器,但是存在一个“鉴别器”列,数据为“(未定义)”。

如果我有 Fluent API 代码,例如: .Map(m => m.Requires("判别器").HasValue("G")) .Map(m => m.Requires("判别器").HasValue("C"));

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

这是我的 Fluent 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");

Person、Customer 和 Dealer 是具体类,而 Entity 和 BizEntity 是抽象类。

如何在没有多余的鉴别器列的情况下获得正确的 TPH?

【问题讨论】:

    标签: entity-framework ef-code-first


    【解决方案1】:

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

    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"));
    

    “鉴别器”列消失了。 我认为这是 EF 的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      相关资源
      最近更新 更多