Entity Framework - Func引起的数据库全表查询
2015-07-16 16:29
417 查看
Entity Framework - Func引起的数据库全表查询
使用 Entity Framework 最要小心的性能杀手就是 ―― 不正确的查询代码造成的数据库全表查询。我们就遇到了一次,请看下面的示例代码:Func<QuestionFeed, > predicate = ; (type == ) { predicate = f => f.FeedID == id && f.IsActive == ; } { predicate = f => f.FeedID == id; } _questionFeedRepository.Entities.Where(predicate);
上面代码逻辑是根据条件动态生成LINQ查询条件,将Func类型的变量作为参数传给Where方法。实际上Where要求的参数类型是:Expression<Func<TSource, bool>>。写代码时没注意这个问题,运行结果也正确。发布后,在SQL Server Profiler监测中,发现QuestionFeed对应的数据库表出现了全表查询,才知道这个地方的问题。问题就是:将Func类型的变量作为参数传给Where方法进行LINQ查询时,Enitity Framework会产生全表查询,将整个数据库表中的数据加载到内存,然后在内存中根据Where中的条件进一步查询。解决方法:不要用Func<TSource, bool>,用Expression<Func<TSource, bool>>。
Expression<Func<QuestionFeed, >> predicate=; (type == ) { predicate = f => f.FeedID == id && f.IsActive == ; } { predicate = f => f.FeedID == id; } _questionFeedRepository.Entities.Where(predicate);
相关文章推荐
- mysql集群安装配置
- 找出oracle没有创建索引的外键
- env: /etc/init.d/redis: Permission denied
- [web安全] SQL注入原理与分类
- linux安装memcached并设置自启动详细操作步骤
- openfire用户整合 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'xxx.xxx' doesn
- Sql Server Report Service 的部署问题
- Mysql 性能优化(一 慢日志)
- mysql绿色版学习
- sql 去重
- Hibernate 执行原始SQL语句
- Sqlite语法
- oracle 定时任务
- Memcached客户端utils类
- sqlServer 存储过程编写和调用
- pl/sql developer 连接oracle 11g数据库错误代码ora12557解决办法
- SQL大量数据查询的优化及非用like不可时的处理方案
- 金典 SQL笔记(4)
- mongodb异常:Unclean shutdown detected
- MySQL存储过程详解&nbsp;&nbsp;mysql&nbsp;…