2015-12-02 59 views
0

我正在使用EF6並使用投影進行查詢。我從代碼中得到了一個問題here:實體框架SQL查詢未返回正確的數據

這段代碼很完美,但是它產生了超過1200行的SQL,並且在第一次調用時,編譯查詢需要花費5秒以上的時間,並且執行它需要300ms不能接受的。你可以看到我的意思here:

我使用Glimpse來查看它正在生成的SQL,並有趣地注意到,如果我刪除註釋,SQL將下降到只有200行代碼。

我決定將SQL放入存儲過程中,儘管它正確地返回了發佈數據,但未填充PostAuthor。

我仔細檢查了與LINQ查詢它填充,但使用

_context.Posts.SqlQuery(...) 

不被填充PostAuthor對象。

我還在SQL Server Management Studio中檢查了原始SQL查詢,並且所有數據都正在返回,它只是在返回時未被填充。

我錯過了什麼嗎?這是一個已知的問題?

+1

您可能需要顯示一些代碼才能提供幫助。什麼是您正在使用的C#LINQ查詢?在Glimpse中生成的查詢的SQL是什麼?您的替代解決方案中的點是什麼? –

+0

如果我記得正確(因爲我沒有使用存儲過程),這是一個基於我讀過的其他線程的已知問題。 –

回答

0

試試這個:

var allposts = _context.Posts 
    .Include(p=>p.Comments) 
    .Include(p=>p.Attachments) 
    .Where(t => t.PostAuthor.Id == postAuthorId) 
    .ToList(); 

當然,張貼SQL能確定是否有可能是檢索數據,以及更好的方法幫助。

+0

感謝您的答案,不幸的是我只需要與特定的發件人和附件與特定的所有者只能得到意見,所以我不能使用這個。這是我的另一個問題的基礎, – grayson

+0

它是否比上述更快? –