使用Entity Framework Core需要注意的一個全表查詢問題


.NET Core 遷移工作如火如荼,今天在使用 Entity Frameowork Core(又名EF Core)時寫了下面這樣的 LINQ 查詢表達式:

.Where(u => u.Id == new Guid(userId)).FirstOrDefaultAsync();

結果在 SQL Server Profiler 中發現竟然進行了全表查詢。

之后將 new Guid(userId) 從表達式中移出,保存於一個局部變量中,使用這個局部變量進行查詢,全表查詢問題就解決了。

var userGuid = new Guid(userId);
var user = await users.Where(u => u.Id == userGuid).FirstOrDefaultAsync();

同事之前也遇到了同樣的問題,在表達式中調用計算時間的方法,也造成了全表查詢。

.Where(p => p.DateCreated > DateTime.Now.AddDays(-1))

解決方法也是將之從表達式中移出。

var startTime = DateTime.Now.AddDays(-1);
Entities.Where(p => p.DateCreated > startTime);

根據目前遇到的情況推測,很可能在 Entity Framework Core 中只要 LINQ 表達式有調用方法的操作就會造成全表查詢,使用時一定要注意這個坑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM