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 に答える