我有一個查詢,它連接兩個在Entity Framework中沒有已定義關係的表,並且已連接的表具有一個到一個第三個表的一對多導航屬性。Eager正在加載加入
msg與作業之間存在一對多關係,但沒有外鍵,並且在.EDMX中沒有定義關聯。
作業和鎖定之間存在一對多關係,並且在.EDMX中定義了一個關聯,因此作業有一個job.locks導航屬性並且鎖具有lock.job導航屬性。
我原來的查詢:
var msgsAndJobs = (
from m in dbContext.msgs
join j in dbContext.jobs
on new { jobid = m.jobid, priority = m.priority }
equals new { jobid = j.jobid, priority = j.priority }
where m.msgtype == "EMERGENCY"
orderby new { m.recvdt }
select new { m, j }
);
我發現,EF是生成一個查詢的加入,則執行第二查詢來填充每個導航性能和聯接返回的每一條記錄。
微軟的文檔說明問題:https://msdn.microsoft.com/en-us/data/jj574232.aspx
所以我認爲我能夠使用.INCLUDE()子句,急切地加載所涉及的記錄。但它似乎並不奏效:
我的新查詢:
var msgsAndJobs = (
from m in dbContext.msgs
join j in dbContext.jobs.Include("locks")
on new { jobid = m.jobid, priority = m.priority }
equals new { jobid = j.jobid, priority = j.priority }
where m.msgtype == "EMERGENCY"
orderby new { m.recvdt }
select new { m, j }
);
,它仍然產生每個職位鎖定的查詢。
任何想法我做錯了什麼?
'使用System.Data.Entity;'將添加支持lambda表達式重載'包括' –
得到了lambda表達式的工作,但查詢仍然是懶加載... –
你試過只是做一個投影鎖沒有包含甚至更好...手動添加您的連接到鎖? – ewahner