繁体   English   中英

实体框架4和SQL Server 2008多个可能的外键

[英]Entity Framework 4 and SQL Server 2008 Multiple Possible Foreign Keys

我正在尝试提出一种可与Entity Framework 4 Code First一起使用的数据库设计。 实际上,我还没有EF4 Code First的经验,但是据我了解,如果我编写代码,它将创建数据库和表。

问题是这个。 拍卖有多种类型,它们都有一些共同的领域和一些特定的领域。 在代码中,我设想有一个称为Auction的基础抽象类以及LowestUniqueBidAuctionEnglishForwardAuction等子类。

没什么奇怪的。 问题是我想象数据库结构可以模仿这一点。 我想象一个Auction表和一个LowestUniqueBidAuction表和一个EnglishForwardAuction表。 Auction表中,我想象根据该行的拍卖类型,在每行这两个表之一中插入外键。 我还想象Auction表中的另一列具有派生拍卖表的名称(例如EnglishForwardAuction )。

问题在于,无论何时创建外键,我都必须指定键指向的外表的名称(这很有意义)。 但是,在这种情况下,键可能指向许多表之一。 所以这里有很多问题。 首先,我不能简单地使用外键,而只能使用普通字段,但是数据库将无法为我保持数据一致性。 第二个问题是EF Code First将如何处理? 换句话说,如果我从Auction表中询问所有EnglishForwardAuction行,它应该如何查看具有表名的列,然后加入EnglishForwardAuction表以获取额外的字段,该EnglishForwardAuction知道呢?

有没有人遇到过类似的问题?

谢谢,

萨钦

在Entity Framework中,该问题可以通过多种方式解决-阅读EF如何处理继承以及可用的策略。

基本上有三种策略可以解决此问题:

(1)每个层次的表

您只有一个表,该表代表所有可能的子类。 当然,这意味着几行(仅存在于给定的子类中)必须为空,因为它们不会显示/在超类或其他子类中不存在。

(2)每种类型的表

每个子类都有自己的表,并且默认情况下,子类型表与基类的表共享PK-例如, Auction中的PK = 1EnglishForwardAuction也将为PK = 1 因此,您的子类表引用了基表,而不是相反。

(3)每种混凝土类型的表

每个具体的子类(您单独的拍卖类型)都有自己的表,但该表包含所有内容-该特定类型的所有列,还包括其基本类型。

在这里阅读更多:

搜索Entity Framework Inheritance和/或这些策略之一也将揭示更多的成功案例-该主题在互联网上得到了很好的覆盖和讨论! :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM