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列?