如何配置Fluent NHibernate以输出查询以进行跟踪或调试,而不是控制台?
如何配置Fluent NHibernate以输出查询以进行跟踪或调试,而不是控制台?
我可以从各地的论坛和博客帖子中看到,在我之前的很多人都在寻找一种方法来获取SQL语句,因为它们正在准备执行.答案通常是"你不能"或"你不应该".
不管我是否应该,这就是我想要的.
经过数小时的搜索、调查和失败的try ,我终于想出了这个主意.
写一个拦截器:
using NHibernate;
using System.Diagnostics;
public class SqlStatementInterceptor : EmptyInterceptor
{
public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
{
Trace.WriteLine(sql.ToString());
return sql;
}
}
当然,你不需要在这里输入Trace.WriteLine()
,你可以将其写入日志(log)文件,或者任何你需要的东西.
在连接管理器中,连接拦截器,如下所示:
protected virtual void Configure(FluentConfiguration config)
{
config.ExposeConfiguration(x =>
{
x.SetInterceptor(new SqlStatementInterceptor());
});
}
没那么复杂.从我的Angular 来看,当然比试图通过Fluent将所有这些XML推送到NHibernate更容易——因为Fluent将XML文件抽象出来.
请记住,您只能有一个拦截器——因此,如果您已经有一个拦截器,您可能需要将此功能与现有拦截器集成.在这一点上,你可能想给它起一个更宽泛的名字——例如MyAppInterceptor,这样就不意味着有特定的用途,因为你以后可能想给它添加其他功能.