使用Entity Framework Core需要注意的一个全表查询问题
Posted dudu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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 表达式有调用方法的操作就会造成全表查询,使用时一定要注意这个坑。
以上是关于使用Entity Framework Core需要注意的一个全表查询问题的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework Core “实体类型‘XXX’需要定义一个主键。”
Entity Framework Core 需要定义一个主键