EFCore 查看Sql语句
调试时,sql语句在控制台上打印出来1,控制台输出sql语句
--引入包 Microsoft.Extensions.Logging.Console
--在Db实体映射关系类中设置
2,SQL Server Profiler 工具追踪查询
--打开SSMS工具,点击工具,选择 SQL Server Profiler
--配置相关设置,主要是设置程序名称,就是数据库主机名;模板一般选择TSQL
--事件选择勾选TSQL即可
--运行程序后,根据端点跟踪,配合工具的暂停清除等可找到对应sql语句
EFCore Linq
1,.Where(one => one.xx = xxx) 条件查询 【Where可多个连用】
2,.Contains(one.xx) 包含
3,.OrderBy(one => one.Id) 以Id排序
4,.Select(one => new {xx = one.xx}) 选择实体属性,返回匿名对象
5,.Skip(int) 跳过多少条记录
6,.Take(int) 获取多少条记录
7,【Join内连】 连接2个实体组合条件查询 【 from A in EnA join B in EnB on A.Id equals B.Id ... 以某个属性值作为连接点,从而组合两个实体】
8,【Join左连】 【from A in EnA join B in EnB on A.Id equals B.Id into newList from one in newList.DefaultIfEmpty() 】
EFCore事务
EFCore 事务伪代码1,多次数据库实体操作,只使用一次SaveChanges,即可保证事务
2,独占数据库,使用context.Database.BeginTransaction() + EFCore操作 + context.SaveChanges() + context.Database.Commit()
EFCore调优
1,Query语句与数据操作分离,如ToList()方法,会立刻将数据读取到内存中,EFCore默认延迟执行是在使用数据数据的时候才会加载,而ToList()方法就是一种使用;
2,.Find() 方法带有缓存机制,查询时会先去内存中查找数据,而.FirstOrDefault()则没有;
3,只查询数据时,去除数据跟踪加入.AsNoTracking();
网友评论