ef core 获取SQL语句

问题描述

ef core 获取SQL语句

网上最多就是类似于在 IQueryable 上面扩展方法,这样只能获取查询列表的SQL 语句,但如果 我是查

_dbContext.Set<T>().AsNoTracking().FirstOrDefaultAsync(predicate);

这样,我只能使用

_dbContext.Set<T>().AsNoTracking().ToQueryString();

来获取SQL语句,这个 ToQueryString 方法并没有 sql语句的 where 部分语句,也就是没有条件。只生成了 select 字段列表 from 表。

我想要的

我想的是能不能获取到的 SQL 语句 ,跟在 Sql Server Profiler 一样。 或者像 SqlSugar一样支持 Ado 切面。但现在 EF core 好像是没有办法的。

sql sugar获取 SQL 语句

            var db = new SqlSugarClient(new ConnectionConfig()

{

ConnectionString = ConnStr,

DbType = DbType.SqlServer,

IsAutoCloseConnection = true,

InitKeyType = InitKeyType.Attribute

});

//sql执行前

db.Aop.OnLogExecuting = (sql, pars) =>

{

Debug.WriteLine("SQL执行前==>>>" + sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));

if (db.TempItems == null) db.TempItems = new Dictionary<string, object>();

};

//sql执行后

db.Aop.OnLogExecuted = (sql, pars) =>

{

Debug.WriteLine("SQL执行后==>>>" + sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));

};

//sql执行错误

db.Aop.OnError = (pars) =>

{

};

回答

有很多中方法实现

1、自定义DbCommandInterceptor

2、自定义Logger,在输出日志中拦截处理

以上是 ef core 获取SQL语句 的全部内容, 来源链接: utcz.com/a/66033.html

回到顶部