私は Entity Framework 4 CTP5 コードの最初のアプローチを使用しており、階層ごとのテーブル (TPH) マッピングを使用しています。階層内のいくつかのクラスには、共通のプロパティがあります。
public class BaseType
{
public int Id { get; set; }
}
public class A : BaseType
{
public string Customer { get; set; }
public string Order { get; set; }
}
public class B : BaseType
{
public string Customer { get; set; }
public string Article { get; set; }
}
public class C : BaseType
{
public string Article { get; set; }
public string Manufacturer { get; set; }
}
デフォルトの規則では、これを次の列にマップします。
- ID
- 第1条
- 第2条
- 顧客1
- 顧客2
- メーカー
- 注文
- タイプ
EF4 で共通のプロパティを共有して、最終的に次のようにしたいと考えています。
- ID
- 論文
- お客様
- メーカー
- 注文
- タイプ
列数の削減とは別に、これには、たとえば Article に基づいてレコードを検索できるという利点があります。どのタイプが Article プロパティを正確に持っているかを知る必要はありません。
各共通プロパティを同じ列にマッピングしてみました:
modelBuilder.Entity<B>().Property(n => n.Article).HasColumnName("Article");
modelBuilder.Entity<C>().Property(n => n.Article).HasColumnName("Article");
しかし、これは次の例外をスローしました:
指定されたスキーマは無効です。エラー: (36,6): エラー 0019: 型の各プロパティ名は一意である必要があります。プロパティ名 'Article' は既に定義されています。
この検証ルールを回避する方法を知っている人はいますか?