EF性能优化(一)

1、EF SQL监控工具

目前采用SQLServer 自带的SQL Server Profiler来监控执行的sql,或者采用第三方插件

MiniProfiler,具体用法可以网上查一下。

2、EF使用SQlQuery 直接写sql

EF效率低于ADO.NET是因为LINQ-TO-SQL的过程消耗了时间。而使用SqlQuery则可以直接写SQL语句。

当然,如果你想得到更快的执行速度,你也可以在数据库上写存储过程proc

3、单纯的数据查询 

EF使用AsNoTracking(),无跟踪查询技术(查询出来的数据不可以进行修改)

例如:

 var user = context.user.AsNoTracking().Where(A => A.Id == 1).FirstOrDefault() ;

                    student.Name = "小明";

                    context.SaveChanges();

 最终不会更新数据库的信息,所以我们在做数据集合查询显示,而又不需要对集合修改并更新到数据库的时候,

 一定不要忘记加上AsNoTracking。

 如果查询过程做了select映射就不需要加AsNoTracking。

 如:db.user.Where(t=>t.Name.Contains("小明")).select(t=>new (t.Name,t.Age)).ToList();

4、 EF 使用 AsNonUnicode

示例:

 using (BingFaTestEntities context = new BingFaTestEntities())

     {

        var a = context.User.AsNoTracking().Where(m => m.Name == DbFunctions.AsNonUnicode("小明")).ToList();


     }

官方解释:LINQ to Entities 运算符,它将输入的字符串视为非 unicode 字符串。

此方法仅适用于 LINQ to Entities 查询。

作用:不加AsNonUnicode SQL中会有 N,加了AsNonUnicode后,SQL中没有N ,使用 N 前缀(查询过程中需要把数据库默认格式转化为Unicode 格式来查询,因此:性能被拉低)

当然如果查询包含中文字符等建议不要使用该方法

5、EF查询多字段组合排序

如果涉及多个字段排序不要都是使用 OrderBy,应该是第一个OrderBy后用ThenBy

示例:

 var list = db.User.Where(m => m.Name.StartsWith("明")).OrderBy(m => m.Number).ThenBy(m => m.Name).ToList();

6、EF count(*)的问题(Any的用法)

场景:查询用户表中是否有小明这个用户

var flag1=db.User.Where(m=>m.Name=="小明").Count()>0

var flag2=db.User.Where(m=>m.Name=="小明").FirstOrDefault()!=null

var flag3=db.User.Any(m=>m.Name=="小明").Count()>0

经过测试性能最高的是用Any 所以判断是否存在尽量采用Any

7、EF的批量删除和新增、修改

使用EF扩展 Entity Framework Extendeds

示例:db.User.AddRange(list);//批量插入


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT技术分享社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值