我使用Dapper扩展(DE)作为ORM。它是在数据访问层中使用的,数据访问层采用存储模式来实现。是后端的RDBMS.
DE自动为我生成大多数查询。为了调试目的,我想记录那些自动生成的查询。
有两种方法可以实现这一点:-
如何在不使用任何其他日志工具的情况下记录/获取由Dapper扩展自动生成的SQL查询?
其他类似的问题是关于Dapper的。这个问题是关于Dapper扩展的。
发布于 2018-06-15 12:23:48
查看@MarcGravell和这中关于使用Dapper进行同样操作的这问题,MiniProfiler.Integrations是实现Dapper扩展日志记录的更好方法。
以上问题是关于Dapper的。但是Dapper扩展在内部使用Dapper。因此,如果为Dapper实现了日志记录,那么Dapper扩展的工作也是一样的。
更多细节可以在GitHub上找到。
示例代码如下:
var factory = new SqlServerDbConnectionFactory(connectionString);
CustomDbProfiler cp = new CustomDbProfiler();
using(var connection = DbConnectionFactoryHelper.New(factory, cp))
{
//DB Code
}
string log = cp.ProfilerContext.GetCommands();如果适合您的需要,可以使用内置CustomDbProfiler使用CustomDbProfiler.Current。无论调用方法多少次,cp.ProfilerContext.GetCommands()都会返回所有命令(成功和失败)。我不确定,但它可能是在内部维护串连字符串(StringBuilder可能是)。如果是这样的话,这可能会减慢性能。但是,在我的例子中,默认情况下日志记录是禁用的。我只在需要调试某些东西时才启用日志记录。所以这对我来说不是问题。
如果在非常大的范围内使用单个连接,也可能会引起内存占用问题。为了避免这种情况,请确保正确地处理CustomDbProfiler实例。
正如前面提到的,最初,我想避免这种方式(使用外部工具/库)。但是,MiniProfiler.Integrations并不是在自己编写日志。我可以简单地获取生成的所有查询,并将这些查询提供给我的记录器模块以转储到文件中。所以,我现在觉得这个更合适。
MiniProfiler.dll在内部实现了类似的逻辑(在StackExchange.Profiling.Data.ProfiledDbConnection和StackExchange.Profiling.Data.ProfiledDbCommand类中),其中提到了这里和这里。因此,如果我决定(将来可能)绕过MiniProfiler,我可以自己使用这个实现。
https://stackoverflow.com/questions/44183650
复制相似问题