1
我已经按照这个SO链接Entity Framework: How to avoid Discriminator column from table?接受的答案创建了多个类型的名为TPH实体的单个表。实体框架代码第一个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”的鉴别符,但是,存在具有数据“(Undefined)”的列“鉴别符”。
如果我有像流利API代码: .MAP(M => m.Requires( “鉴别”)的HasValue( “G”)) .MAP(M => m.Requires( “鉴别”) .HasValue( “C”));
然后在表“实体”中,冗余列现在被命名为“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");
人,客户和经销商是具体的类,而实体和BizEntity都是抽象的。
如何有适当的TPH没有多余的Disscriminator列?