簡體   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