你必须知道的EF知识和经验
这段代码我也是从网上偷的,具体链接找不到了。 然后我们的代码可以写成: 有没有美美哒一点 EF的预热http://www.cnblogs.com/dudu/p/entity-framework-warm-up.html count(*)被你用坏了吗(Any的用法)要求:查询是否存在名字为“张三”的学生。(你的代码会怎样写呢?) 第一种?第二种?第三种?呵呵,我以前就是使用的第一种,然后有人说“你count被你用坏了”,后来我想了想了怎么就被我用坏了呢?直到对比了这三个语句的性能后我知道了。 性能之差竟有三百多倍,count确实被我用坏了。(我想,不止被我一个人用坏了吧。) 我们看到上面的Any干嘛的?官方解释是: 我反复阅读这个中文解释,一直无法理解。甚至早有人也提出过同样的疑问《实在看不懂MSDN关于 Any 的解释》 所以我个人理解也是“确定集合中是否有元素满足某一条件”。我们来看看any其他用法: 要求:查询教过“张三”或“李四”的老师 实现代码: 两种方式,以前我会习惯写第一种。当然我们看看生成过的sql和执行效率之后,看法改变了。 效率之差竟有近六倍。 我们再对比下count: 得出奇怪的结论:
透明标识符假如由于各种原因我们需要写下面这样逻辑的语句 我们可以写成这样更好 看生成的sql就知道了 第二种方式生成的sql要干净得多,性能也更好。 EntityFramework.Extended这里推荐下插件EntityFramework.Extended,看了下,很不错。 最大的亮点就是可以直接批量修改、删除,不用像EF默认的需要先做查询操作。 至于官方EF为什么没有提供这样的支持就不知道了。不过使用EntityFramework.Extended需要注意以下几点:
http://www.cnblogs.com/GuZhenYin/p/5482288.html 在此纠正个问题EntityFramework.Extended并不是说不能回滚,感谢@GuZhenYin园友的指正(原谅我之前没有动手测试)。 注意:需要NuGet下载EntityFramework.Extended, 并导入命名空间: using EntityFramework.Extensions ; 测试代码如下:(如果注释掉手抛异常代码是可以直接更新到数据库的) using (var ctxTransaction = db.Database.BeginTransaction()) { try { db.Teachers.Where(t => true).Update(t => new Teacher { Age = "1" }); throw new Exception("手动抛出异常"); ctxTransaction.Commit();//提交事务 } catch (Exception) { ctxTransaction.Rollback();//回滚事务 } } 自定义IQueryable扩展方法最后整理下自定义的IQueryable的扩展。
补充: First和Single的区别:前者是
结束: 源码下载:http://pan.baidu.com/s/1o8MYozw 本文以同步至《C#基础知识巩固系列》 欢迎热心园友补充! (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |