Entity framework 实体框架代码第一个TPH重复/冗余鉴别器列?
我已经按照接受的答案ThisSO链接为多种类型创建了一个名为Entities of 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
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的一个缺陷