我的数据库中有两个表:Masters
和Details
.
这些表与外键约束一对多相关,其中'sMasters
是主键表,并且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
细节。
如果我要从实体框架中抽象出来,我会为Detail_2
and添加中间基类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> {}
但是如何使用实体框架来实现呢?我不喜欢当Master
有一个集合时的解决方案Details
,因为这不能提供编译时保证。
我正在寻找没有额外层级Master
和Detail
层次结构的方式。有任何想法吗?