Entity Framework DB-First、継承を実装する 質問する

Entity Framework DB-First、継承を実装する 質問する

私は、Entity Framework 6.0 とデータベース ファースト アプローチを使用して継承を実装しようとしています。 さて、次のようなエンティティがあるとしPersonますOrganization

// a simplified version of organization entity
public class Organization
{
    public Guid ID { get; set; }
    public string Nickname { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public string OfficialName { get; set; }
    public Guid CEOID { get; set; }
    public DateTime? RegisterDate { get; set; }
}

// a simplified version of person entity
public class Person
{
    public Guid ID { get; set; }
    public string Nickname { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public Guid PersonID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string MiddleName { get; set; }
    public string NationalCode { get; set; }
    public DateTime? BirthDate { get; set; }
}

Personデータベースにこれら 2 つのテーブルを作成できますが、継承を使用して、両方で繰り返されるフィールドをOrganization以下のように別の基本クラスに配置したいと考えています。

public class Identity
{
    // These fields are the common fields between Person and Organization
    public Guid ID { get; set; }
    public string Nickname { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
}

どうすればこれを DB ファースト アプローチで実現できるでしょうか?

ベストアンサー1

一つの方法としては1つのテーブルのために各タイプと呼ばれる翻訳(table-per-type) は、私が好んで使用しています。これを実現するには、次の図に示すモデルのようにテーブルを定義します。

テーブル階層

子エンティティとベースエンティティの関係は一対一それぞれのpk列に共通のフィールドがすべて基本テーブルに移動されます。テーブルを作成したら、Visual Studioのモデルページを右クリックし、データベースからモデルを更新...をクリックし、追加タブで、追加する 3 つのテーブルを選択します。最初に、少し変更が必要なこのモデル図が表示されます。

最初に追加されたテーブル

Personおよびに対して、次の手順をOrganization個別に実行します。

  • エンティティを右クリックして選択プロパティ
  • の中に基本タイププロパティ選択Identity
  • 選択して関連付けを削除するこのエンティティとIdentity
  • 選択してPKを削除するこのエンティティの (ID 列) (基本エンティティから継承)

これらの手順を実行した後、モデルを保存します。モデルは次のようになります。

変更されたモデル

今すぐプロジェクトをコンパイルして、人生を楽しんでください!

追加リソース:
Entity Framework デザイナー TPH 継承

おすすめ記事