2013-10-24 144 views
7

具有相同的名稱,以同一列地圖屬性作爲EF6的,可以配置使用表每一個分層繼承的實體映射時,做這樣的事情:實體框架6 TPH繼承:默認情況下

public class MyContext : DbContext 
{ 
    public DbSet<Device> Devices { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<ABatteryPoweredDevice>().Property(c => c.BatteryLevel).HasColumnName("BatteryLevel"); 
     modelBuilder.Entity<ADifferentBatteryPoweredDevice>().Property(c => c.BatteryLevel).HasColumnName("BatteryLevel"); 
    } 
} 

BatteryLevel不是Device基類的一部分 - 它是爲實現接口契約而實現的派生類的屬性。

是否有可能將此設爲默認行爲,而不必爲每個派生類添加新映射?

回答

9

使用Custom Code First Conventions,這些都可以從EF6起,理清了這一點:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //your code before 
     modelBuilder.Properties().Configure(prop => prop.HasColumnName(prop.ClrPropertyInfo.Name)); 
     //your code after 
    } 

這具有相同名稱在不同的派生類型相同的表列映射屬性,而無需顯式調用像提到的那些題。