2013-10-24 36 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 
    } 

这具有相同名称在不同的派生类型相同的表列映射属性,而无需显式调用像提到的那些题。