Ami*_*shi 6 c# dapper dapper-extensions
我使用Dapper Extensions(DE)作为ORM.它在使用Repository模式实现的数据访问层中使用.SQL Express是后端RDBMS.
DE会自动为我生成大部分查询.我想记录这些自动生成的查询以进行调试.
我可以通过两种方式来实现这一目标: -
如何在不使用任何其他日志记录工具的情况下记录/获取Dapper Extensions自动生成的SQL查询?
在其他类似的问题是关于小巧玲珑.这个问题是关于Dapper Extensions.
查看@MarcGravell 的评论以及关于使用 Dapper 执行相同操作的问题,MiniProfiler.Integrations是为 Dapper 扩展实现日志记录的更好方法。
上面链接的问题是关于 Dapper 的。但 Dapper Extensions 在内部使用 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();
Run Code Online (Sandbox Code Playgroud)
如果适合您的需要,您可以使用内置CustomDbProfiler使用。无论您调用该方法多少次,都会返回所有命令(成功和失败)。我不确定,但是,它可能在内部维护连接字符串(可能是)。如果是这种情况,可能会降低性能。但是,就我而言,默认情况下禁用日志记录。我仅在需要调试某些内容时启用日志记录。所以这对我来说不是问题。CustomDbProfiler.Currentcp.ProfilerContext.GetCommands()StringBuilder
如果在非常大的范围内使用单个连接,这也可能会引起内存占用问题。为了避免这种情况,请确保CustomDbProfiler正确处置实例。
正如问题中提到的,最初,我想避免这种方式(使用外部工具/库)。但是,MiniProfiler.Integrations不是写日志本身。我可以简单地获取生成的所有查询并将其提供给我的记录器模块以转储到文件中。这就是为什么,现在这看起来更适合我。
MiniProfiler.dll 在内部实现类似的逻辑(在StackExchange.Profiling.Data.ProfiledDbConnection和类中),这在此处和此处StackExchange.Profiling.Data.ProfiledDbCommand提到。因此,如果我决定(将来可能)绕过 MiniProfiler,我可以自己使用此实现。
| 归档时间: |
|
| 查看次数: |
2690 次 |
| 最近记录: |