【问题标题】:C# - EF 6 Multiple Tables To One FKC# - EF 6 多个表到一个 FK
【发布时间】:2015-01-22 12:20:40
【问题描述】:
我正在使用 Code First/Fluent API 设计一个数据库并遇到了这个问题:
如何映射一个可以引用不同表的外键?
这是场景:
我有一个具有 5 级层次结构的帐户图表。
从上到下(一对多:Acc1 可以有多个 Acc2 以此类推,Acc2 必须有一个 Acc1):
Account1 -> Account2 -> Account3 -> Account4 -> Account5
示例:供应商可以在任何科目表中:1 或 2 或 3 或 4 或 5。(这是商业自动化中的规则)。
如何使用 fluent API 进行处理?
【问题讨论】:
标签:
c#
entity-framework
ef-code-first
poco
ef-fluent-api
【解决方案1】:
EF 不仅无法实现您想要做的事情;在数据库中是不可能的。单个外键只能引用单个表。
如果Account 1-5的数据要求相同,你应该考虑将它们组合成一个带有引用自身的外键的单个表:
Accounts
------
AccountId int not null pk
Level (1-5)
ParentId int null fk (references Accounts(AccountId))
OtherColumnsAsNeeded
Supplier
------
SupplierId int not null fk (references Accounts(AccountId))
ParentId int not null fk (reference Accounts(AccountId))
这将使 EF 中的建模更加容易。您仍然需要在代码中维护某些业务规则(例如 Level-2 Account 必须有 Level-1 ParentId)。