簡體   English   中英

EF忽略急切加載的“ include”語句

[英]EF Ignores Eager-Loading “Include” statement

我已經看到這個問題一次 又一次地 出現 當我閱讀答案時,以下陳述很好地概括了常見的答案:

任何手動聯接或投影都將更改查詢的形狀,並且將不使用“包含”
- 拉迪斯拉夫·姆恩卡

好的,所以我決定使用DbContext創建一個“ hello world”示例EF代碼優先項目來測試該語句。 我創建了以下查詢:

var result = 
    from c in context.Customers.Include(i => i.Addresses)
    from a in c.Accounts
    where a.ID > 4
    select c;

Include()語句應該起作用,因為我顯然滿足要求:(1)我沒有通過使用匿名類型來修改投影,並且(2)我沒有手動處理聯接。

但是,它不起作用。 此查詢生成的SQL查詢是這樣的:

SELECT 
  [Extent1].[ID] AS [ID], 
  [Extent1].[Name] AS [Name]
  FROM  [dbo].[Customers] AS [Extent1]
  INNER JOIN [dbo].[Accounts] AS [Extent2] ON [Extent1].[ID] = [Extent2].[Customer_ID]
  WHERE [Extent2].[ID] > 4

如果我刪除了對Accounts的聯接和過濾,那么include語句將正確生成。 為什么會這樣呢?

我還為EF官方文檔似乎沒有解釋何時兌現Include()的規則而感到困擾。 我只是忽略了什么嗎?

通過使用c.Accounts指定第二個from語句,可以“手動處理c.Accounts

請嘗試下面的查詢,該查詢的上下文僅基於Customer實體:

from c in context.Customers.Include( i => i.Addresses )
where c.Accounts.Any( a => a.ID > 4 )
select c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM