9

从 EF6 开始,可以在使用 Table Per Hierarchy 继承配置实体映射时执行以下操作:

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基类的一部分-它是为实现接口契约而实现的派生类的属性。

是否可以将此作为默认行为,而不是必须为每个派生类添加新映射?

4

1 回答 1

12

使用自EF6 起提供的Custom Code First Conventions来解决这个问题:

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

这会将不同派生类型中具有相同名称的属性映射到同一个表列,而无需像问题中提到的那样显式调用。

于 2014-03-18T18:16:29.043 回答