エンティティフレームワーク6.0とデータベースファーストアプローチを使用して継承を実装しようとしています。 OK、次のような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; }
}
これら2つのテーブルをデータベースに作成できますが、継承を使用して、Person
と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-firstアプローチでこれをどのように達成できますか?
考えられる1つの方法は、one table for each type called [〜#〜] tpt [〜#〜](table-per-type )、私が使用することを好みます。これを実現するには、次の図に示すモデルのようにテーブルを定義します。
子とベースエンティティ間の関係は、pk列でone-to-oneであり、すべての共通フィールドがベーステーブルに移動されることに注意してください。テーブルを作成したら、Visual Studioのモデルページを右クリックし、データベースからモデルを更新...を選択し、[追加]タブでこれら3つのテーブルを選択して追加します。最初に、このモデル図が表示されます。これは少し変更する必要があります。
Person
とOrganization
に対して別々に次の手順を実行します。
Identity
を選択しますIdentity
の間これらの手順の後、モデルを保存します。これで、モデルは次のようになります。
今、あなたのプロジェクトをコンパイルして、あなたの人生を楽しんでください!