[英]Entity Framework 4 and SQL Server 2008 Multiple Possible Foreign Keys
我正在尝试提出一种可与Entity Framework 4 Code First一起使用的数据库设计。 实际上,我还没有EF4 Code First的经验,但是据我了解,如果我编写代码,它将创建数据库和表。
问题是这个。 拍卖有多种类型,它们都有一些共同的领域和一些特定的领域。 在代码中,我设想有一个称为Auction
的基础抽象类以及LowestUniqueBidAuction
和EnglishForwardAuction
等子类。
没什么奇怪的。 问题是我想象数据库结构可以模仿这一点。 我想象一个Auction
表和一个LowestUniqueBidAuction
表和一个EnglishForwardAuction
表。 在Auction
表中,我想象根据该行的拍卖类型,在每行这两个表之一中插入外键。 我还想象Auction
表中的另一列具有派生拍卖表的名称(例如EnglishForwardAuction
)。
问题在于,无论何时创建外键,我都必须指定键指向的外表的名称(这很有意义)。 但是,在这种情况下,键可能指向许多表之一。 所以这里有很多问题。 首先,我不能简单地使用外键,而只能使用普通字段,但是数据库将无法为我保持数据一致性。 第二个问题是EF Code First将如何处理? 换句话说,如果我从Auction
表中询问所有EnglishForwardAuction
行,它应该如何查看具有表名的列,然后加入EnglishForwardAuction
表以获取额外的字段,该EnglishForwardAuction
知道呢?
有没有人遇到过类似的问题?
谢谢,
萨钦
在Entity Framework中,该问题可以通过多种方式解决-阅读EF如何处理继承以及可用的策略。
基本上有三种策略可以解决此问题:
(1)每个层次的表
您只有一个表,该表代表所有可能的子类。 当然,这意味着几行(仅存在于给定的子类中)必须为空,因为它们不会显示/在超类或其他子类中不存在。
(2)每种类型的表
每个子类都有自己的表,并且默认情况下,子类型表与基类的表共享PK-例如, Auction
中的PK = 1
在EnglishForwardAuction
也将为PK = 1
。 因此,您的子类表引用了基表,而不是相反。
(3)每种混凝土类型的表
每个具体的子类(您单独的拍卖类型)都有自己的表,但该表包含所有内容-该特定类型的所有列,还包括其基本类型。
在这里阅读更多:
搜索Entity Framework Inheritance
和/或这些策略之一也将揭示更多的成功案例-该主题在互联网上得到了很好的覆盖和讨论! :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.