2014-11-04 56 views
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列?

回答

0

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

和列「鑑別」消失。 我認爲這是一個EF的錯誤。