我對EF來說相當陌生,現在已經困擾了我幾天:如何獲得一個EF查詢來編譯最優化的SQL?
我有一個用戶實體。它有一個父WorkSpace,它有一組用戶。 每個用戶在User.Schedules屬性中也有一個Children Schedule的集合。
我瀏覽過的對象是這樣的:
var query = myUser.WorkSpace.Users.SelectMany(u => u.Schedules);
當列舉的query
結果(MYUSER是已使用.Find(用戶ID)先前加載用戶的實例),我注意到, EF會在WorkSpace中爲每個用戶對數據庫執行一次查詢。用戶
爲什麼EF無法從myUser的主鍵開始在單個查詢中獲取結果,並將其與所有涉及的表連接在一起?
如果我做別的事情直接從上下文中像這樣的,它工作正常,但:
context.Users.Where(u => u.ID = userid).SelectMany(u => u.WorkSpace.Users.SelectMany(u => u.Schedules))
有什麼我做錯了嗎?
使用'.Join'讓EF理解你想要達成的目標 –
但是我會加入什麼?我想我會在我的背景下加入一些東西,所以和第二個例子沒什麼兩樣,是嗎? –
我可能不是最好解決這個問題,因爲我不使用導航屬性,我保持清楚。我只是一直使用鍵和連接,如果查詢變得更加複雜,我使用Dapper或其他東西在代碼存儲過程中啓動 –