ef 查询生成语句的几种方式
前言
整理一下ef 如何查看生成sql 语句的,现在有ef core 了,统一整理一下。
正文
方式如下:
数据库监听
这是一种推荐方式,因为调试和代码分开,不会有影响。
然后连接:
然后可以进行一些常规选择,保存监听的位置。
然后是选择事件:
只筛选Tsql相关的。
然后通过列筛选:
这里介绍几个,一个是HOMENAME,这个是电脑的电脑名,因为可能有多个用户在操作。其实一般来说,每个人的测试服务器的账号都是不一样的,也可以通过LOGINNAME 来筛选。
然后一个就是数据库的DATABASENAME,这个你获取到的不一定是你查的那个数据库,但是你可以排除REPORTSERVER 这个数据库,因为这个是报告服务,而且频繁操作,非常影响你的查看。
然后其他的其实可以按照自己的需求进行筛选。
EF 链式
EFForTestEntities eFForTestEntities = new EFForTestEntities();
var sql=eFForTestEntities.User.AsNoTracking();
Console.WriteLine(sql);
Console.Read();
通过调用AsNoTracking 查看,一般是另外写测试单元来查看。
linq
linq和上面的差不多,就是调用的方法改为:ToTraceString()
Log 输出
DbContext.Database.Log = (c) => { Console.WriteLine(c); }
这种方式通过log 打印来输出,我们可以放在日志文件中,然后进行查看。
这种方式同样使用与ef core,而EF 链式和linq 在.net core的ef是无法使用的。
第三方工具
在网上可以找到第三方工具在调试的时候可以查询到,个人表示不推荐,因为麻烦,而且sql 监听已经可以满足大部分调试需求。