[英]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()不能解決“區別”問題。 為此,我看到了兩種解決方案:
修改您的上下文,以便每個導航屬性都有一個特殊名稱(“收銀員”,“主管”)。 然后,您只需編寫:
dbContext.Invoices.Single(i => i.invoiceNumber == 1).Cashier.userName;
給您的用戶一個“類型”字段。 這可以是存儲在用戶表中的字符串,也可以是“ 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.