我正在使用Code First / Fluent API设计数据库并面临这个问题:
如何映射可以引用不同表的FK?
这是情景:
我有一个5级层次结构的帐户图表。
从顶部到底部(一对多:Acc1可以有很多Acc2等等,而Acc2必须有一个Acc1):
帐户1 - >帐号2 - >帐号3 - >帐号4 - > Account5
示例:供应商可以在任何帐户图表中:1或2或3或4或5.(这是商业自动化中的规则)。
如何使用流畅的API进行处理?
答案 0 :(得分:1)
不仅是你想用EF做的事情;它在数据库中是不可能的。单个外键只能引用单个表。
如果帐户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帐户必须具有Level-1 ParentId)。