【发布时间】: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