如何使用NHibernate配置XML文件中的拦截器?

如何使用NHibernate配置XML文件中的拦截器?,nhibernate,interceptor,Nhibernate,Interceptor,我想在不更改代码的情况下使用nhibernate拦截器(覆盖EmptyInterceptor) 是否可以从XML配置文件执行此操作 我的EmptyInterceptor重写类: public class QueryNumberInterceptor : EmptyInterceptor { public override SqlString OnPrepareStatement(SqlString sql) { return base.OnPrepareS

我想在不更改代码的情况下使用nhibernate拦截器(覆盖EmptyInterceptor)

是否可以从XML配置文件执行此操作

我的EmptyInterceptor重写类:

public class QueryNumberInterceptor : EmptyInterceptor {
        public override SqlString OnPrepareStatement(SqlString sql) {
            return base.OnPrepareStatement(sql);
        }
}
我的XML配置文件:

<config>
    <add key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver, NHibernate"/>
    <add key="dialect" value="NHibernate.Dialect.MsSql2008Dialect, NHibernate"/>
    <add key="connection.connection_string" value="ConnectionString = ${MainConnection}"/>
    <add key="show_sql" value="true"/>
</config>

好的,您不能用配置文件插入拦截器


但是你可以注册一个。您可以对事件侦听器执行与拦截器相同的操作。但这是一个不同的概念,因此看起来也不同。

在哪种情况下我可以捕获生成的查询?@PatrickCoelho没有这样的事件。但是告诉我们您真正需要做什么(记录日志?添加SQL提示?转换查询?);也许有另一种方法。@DiegoMijelshon我想对生成的查询进行计数,如果大于30,则抛出异常。它将帮助我逐出N+1个查询。@Patrick:您可以使用NHibernate探查器()来完成这项工作。它不是免费的,但可以帮助您在没有大量数据的情况下发现性能问题。您还可以在任何地方使用批量大小来系统地避免N+1。@PatrickCoelho这不是检测N+1的好方法。只有在查询之后,对每个元素执行单独的查询时,才会出现问题。正如Stefan所说,有一些工具可以毫不费力地检测到这一点。NHProf不是免费的,但你可以每月订阅26美元,这比你手动解决问题的花费要少。