繁体   English   中英

指向实体框架中相同表的多个外键是无法区分的

[英]Multiple foreign keys pointing to same table in Entity Framework are indistinguisible

当两个或多个通过数据库上下文指向同一张表时,我无法区分外键。

例如,如果我有一个包含两个表的数据库,即用户表和发票。

Users has two fields: userId and userName
Invoices has three fields: invoiceNumber, cashierUserId, supervisorUserId

cashierUserId和supervisorUserId是指向Users表中的userId的外键。

现在,在通过db上下文的实体框架中,当我尝试获取收银员或主管的用户名时,我无法确定要获取哪个用户名。

dbContext.Invoices.Single(i => i.invoiceNumber == 1).Users.userName;

我得到哪个用户名? 收银员还是主管? 如何告诉我要哪一个?

首先,您的代码有问题。 “用户”集合将没有名为“ userName”的属性。 它可能应该显示为:

dbContext.Invoices.Single(i => i.invoiceNumber == 1).Users.First().userName;

显然,.First()不能解决“区别”问题。 为此,我看到了两种解决方案:

  1. 修改您的上下文,以便每个导航属性都有一个特殊名称(“收银员”,“主管”)。 然后,您只需编写:

     dbContext.Invoices.Single(i => i.invoiceNumber == 1).Cashier.userName; 
  2. 给您的用户一个“类型”字段。 这可以是存储在用户表中的字符串,也可以是“ UserTypes”表中的外键(在规范化数据库中)。 然后您的查询变为:

     dbContext.Invoices.Single(i => i.invoiceNumber == 1).Users.First(u => u.UserType == "Cashier").userName; 

使用不同的表会稍微改变谓词,但是您可以理解。 为了帮助指导设计,请记住EF与标准SQL并没有太大不同。 您将如何制定标准的SQL查询来区分两者? 您将基于外键(第一个选项)或用户表上的另一个字段(第二个选项)。

暂无
暂无

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

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