我在数据库中有以下架构:
ReferencingType 和 ReferencedType 是 BillingTypes 的外键。
BillingTypes 包含以下行:
帐单类型 ID |名称
1 |标签
2 |国家
3 |支付提供商
4 |付款方式
5 |银行
ReferecingId 和 ReferencedId 表示以下实体之一的 Id(取决于引用/引用类型):
将来,每个实体都会添加更多不同的列,但现在这是为简单起见的模式。
每个实体(国家除外)与国家之间都有 (1-) 的联系。
标签具有 (1-) 到银行、PaymentProviders 和 PaymentOptions 的连接。
并且 PaymentProviders 与 PaymentProviders 有 (1-*) 的连接
例如,如果我想将 BankId 为 201 的银行连接到 CountryId 为 3003 的国家
我将在 BillingReferences 中有一条记录,如下所示:
引用类型 = 5
引用 ID = 201
引用类型 = 2
引用 ID = 3003
事件 = 1
出于可扩展性的考虑,我们没有为每种类型的连接制作连接/引用表 - 如果我们想要添加另一个实体,我们要做的就是添加它的表并在 BillingReferences 和 BillingType 中为其添加记录。
问题是我无法在 BillingReferences 和每个实体之间配置条件外键,而且我似乎也无法使用 EntityFramework 配置/映射它......
我找不到任何使用这种类型实现的教程或示例。
我是否必须为每个连接创建一个引用表,或者有没有办法用 EntityFramework 配置它?
谢谢您的帮助 :)
最佳答案
AFAIK,没有办法做到这一点。
我会为每种类型创建一个单独的表,除非你真的有充分的理由不这样做。你提到的考虑不是一个好的考虑,恕我直言。
拥有更多表确实允许您在键上放置外键约束,并且它可以很好地转换为 EF。它还有助于提高性能:与更多较小的表相比,具有一百万行的大引用表将花费更多的时间来查询(除非您总是想要一个类型的所有引用)。
关于entity-framework - Entity Framework : Conditional foreign key,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/605813/