データベースには と の 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_1
Master_2
Detail_2
Detail_3
Entity Framework から抽象化する場合、 and の中間基本クラスを追加Detail_2
しDetail_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
階層のない方法を探しています。何か案は?