[LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL

此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper
支持.net framework4.6.1及以上

支持.net core2.0及以上

目录

 

1.查看查询操作的SQL语句

首先需要保留QuerySet对象,因为根据Linq解析拼接SQL保存在Query对象的SqlProvider中

var query = Connection.QuerySet<T>();

因为该框架默认是懒加载,所以需要先执行该对象,才能获取到从Linq解析出的SQL

例如

query.List();

 

这时就得到了解析的对象

sql语句:query.SqlProvider.SqlString

定义的参数:query.SqlProvider.Params

 

2.查看增删改操作的SQL语句

 var command=Connection.CommandSet<T>();

其他如上相同

 

或者不想执行sql到数据库,只想看解析出的结果,可以使用SqlProvider里的解析sql函数

例如

 var querySet = conn.QuerySet<Comment>()
                               .Join<Comment, News>((a, b) => a.ArticleId == b.Id)
                               .Where(x => x.Id.Between(80, 100)
                               && x.SubTime.AddDays(-10) < DateTime.Now && x.Id > 10)
                               .SqlProvider.FormatCount();  

返回结果

 

3.使用Aop查看实际执行的SQL语句

3.1.8版本后增加Aop属性,可以监控sql执行的前后,并且只会作用于当前线程

    //Sql执行前
            SqlMapper.Aop.OnExecuting += (ref CommandDefinition command) =>
            {
                //生成的sql
                var sql = command.CommandText;
                //生成的参数
                var param = command.Parameters;
            };
            //Sql执行后
            SqlMapper.Aop.OnExecuted += (ref CommandDefinition command) =>
             {
                 //生成的sql
                 var sql = command.CommandText;
                 //生成的参数
                 var param = command.Parameters;
             };

 这种方法还可以监听到原生Dapper执行的前后

 

完整Demo可以去Github上下载:

https://github.com/a935368322/Kogel.Dapper.Test

如有问题也可以加QQ群讨论:

技术群 710217654

框架开源,可以加群下载源码

posted @ 2019-07-01 09:51  Kogel  阅读(5767)  评论(0编辑  收藏  举报