私は、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 継承