1

Entity Framework Code First を使用して ASP.NET MVC 4 でアプリを構築しています。簡単にするために、データベースに格納されるすべてのモデルを、Guid、DateCreated、LastEditDate などを持つ BaseEntity から継承しています。そのような便利なプロパティ。これで、これらの継承されたプロパティを次のようにマップするように EF に指示できることがわかりました。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>().Map(m =>
    {
        m.MapInheritedProperties();
    });

    modelBuilder.Entity<Product>().Map(m =>
    {
        m.MapInheritedProperties();
    });            
}

ただし、すべてのアイテムに対してこれを行う必要があるのはばかげているようです。このルールをすべてのエンティティに適用する方法はありますか?

4

2 に答える 2

1

Table-Per-Concrete-Type (TPC) 継承マッピングと呼ばれるこのようなマッピングは、たとえば 10 個BaseEntityのオブジェクトのリストをロードし、実際の型が実体化されることを期待する場合など、本当にポリモーフィズムを利用したい場合にのみ意味があります。リストに 3 つのUserエンティティと 7つのエンティティが含まれるようにしProductます。

このようなクエリは、アプリケーションでビジネスに関連することがありますか? あなたBaseEntityを見ると、たとえば、特定の日付に作成されたすべてのオブジェクトをクエリすることが、オブジェクトのタイプに関係なく(派生したものである場合BaseEntity)、役立つ可能性があることがわかります。それが必要ですか?また、そのようなクエリがどれほど複雑になるかにも注意してください。SQL は、データベース内のほぼすべてのテーブルに対してクエリを実行し、結果を結合する必要があります。

継承マッピングは、実際のビジネス上の意味がある場合にのみ使用します (たとえばPerson、住所、電話、電子メールなどの意味のあるプロパティを独自に持ち、 andプロパティEmployeeから派生しPersonて追加するなど)。SalaryHiredDate

あなたの場合BaseEntity、エンティティクラスの基本型としてのみを使用し、このクラスにはマッピングをまったく指定しません。EF は引き続き継承されたプロパティをマップしますが、独自のエンティティとしてではなく、エンティティなどUserの一部としてマップします。私はそれを「ベースエンティティProduct」とさえ呼びませんが...わかりません...多分(意味:すべてのエンティティのベース(クラス)ですが、エンティティ自体ではありません)。EntityBase

于 2013-03-22T20:31:29.577 に答える