3

データベースには と の 2 つのテーブルがありMastersますDetails
これらのテーブルは、外部キー制約を使用して 1 対多で関連付けられています。ここでMasters、 は主キー テーブル、Detailsは外部キー テーブルです。

Mastersテーブルからのエンティティの両方に対して、モデルで継承を使用したい:

abstract class Master
{
    public int Id { get; set; }
}

class Master_1 : Master
{
    // other properties
}

class Master_2: Master
{
    // other properties
}

Detailsテーブルからのエンティティの場合:

abstract class Detail
{
    public int Id { get; set; }
}

class Detail_1 : Detail
{
    // other properties
}

class Detail_2: Detail
{
    // other properties
}

class Detail_3: Detail
{
    // other properties
}

しかし、外部キーはどうですか?
概念的には、詳細Master_1のみを含む必要があり、詳細を含む必要があります。Detail_1Master_2Detail_2Detail_3

Entity Framework から抽象化する場合、 and の中間基本クラスを追加Detail_2Detail_3ます。

   abstract class Detail_2_Or_3 : Detail {}
   class Detail_2 : Detail_2_Or_3 {}
   class Detail_3 : Detail_2_Or_3 {}

そして私のMasterジェネリックを作ります:

abstract class Master<TDetail>
    where TDetail : Detail
{
    public int Id { get; set; }
    public Collection<TDetail> Details { get; private set; }
}

class Master_1 : Master<Detail_1> {}
class Master_2 : Master<Detail_2_Or_3> {}

しかし、Entity Framework を使用してこれをどのように実現できるでしょうか? MasterのコレクションがあるDetails場合、これはコンパイル時の保証を提供できないため、ソリューションが好きではありません。

Master追加のレイヤーオーバーとDetail階層のない方法を探しています。何か案は?

4

1 に答える 1