TPC スタイルで Entity Framework を使用していくつかのクラスをマップしようとしたところ、次のエラーが発生しました。
エラー: 型 'A' は、エンティティ分割または別の形式の継承を使用する型から継承されたプロパティをマップするため、定義どおりにマップできません。継承されたプロパティをマップしないように別の継承マッピング戦略を選択するか、階層内のすべての型を変更して継承されたプロパティをマップし、分割を使用しないようにしてください。
このエラーは、次のクラスを使用すると発生します。
public abstract class BaseEntityTest
public abstract class BaseEntityTest2 : BaseEntityTest
public abstract class BaseEntityTest3 : BaseEntityTest2
public class A: BaseEntityTest3 // this class is the only one with a table in the db
OnModelCreating メソッドで、次のコードを追加して TPC マッピングを取得しました
modelBuilder.Entity<A>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("A");
});
構造から BaseEntityTest2 を除外すると (A が BaseEntityTest2 ではなく BaseEntityTest からのみ継承されるように)、エラーはなくなります。これは、このマッピングを作成できないということですか、それとも単に何かが足りないのでしょうか?
編集:
クラスのプロパティ:
public abstract class BaseEntityTest
{
[Key]
public Guid Id { get; set; }
public String Info { get; set; }
[Required]
public DateTime CreationDate { get; set; }
[Required]
public String CreationUser { get; set; }
[Required]
public DateTime ModificationDate { get; set; }
[Required]
public String ModificationUser { get; set; }
[ConcurrencyCheck]
[Required]
public int LockVersion { get; internal set; }
}
public abstract class BaseEntityTest2 : BaseEntityTest
{
[Required]
public string Name { get; set; }
public string Description { get; set; }
}
public abstract class BaseEntityTest3: BaseEntityTest2
{
[Required]
public DateTime FromDate { get; set; }
public DateTime ThruDate { get; set; }
}
public class A: BaseEntityTest3{
public String Test { get; set; }
}