NHibernate-如何使用参数值记录命名参数化查询?

时间:2019-01-14 13:06:58

标签: nhibernate named-query parameterized-query

我有一个名为Query的参数化参数:

Query moveOutQuery = session.createSQLQuery(moveOutQueryStr.toString())
                .addEntity(MyClass.class)
                .setParameter("assignmentStatus", Constants.CHECKED_OUT)

我想查看带有参数填充的实际SQL查询。但是,在调试时,我只会得到以下查询:

  

Select * from my_assignment WHERE assignment_status in ( :assignmentStatus )

为什么不用assignmentStatus代替其实际值?

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码将每个SQL记录到文件中:

Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Root.RemoveAllAppenders();

FileAppender fileAppender = new FileAppender();
fileAppender.Name = "NHFileAppender";
fileAppender.File = logFilePath;
fileAppender.AppendToFile = true;
fileAppender.LockingModel = new FileAppender.MinimalLock();
fileAppender.Layout = new PatternLayout("%d{yyyy-MM-dd HH:mm:ss}:%m%n%n");
fileAppender.ActivateOptions();

Logger logger = hierarchy.GetLogger("NHibernate.SQL") as Logger;
logger.Additivity = false;
logger.Level = Level.Debug;
logger.AddAppender(fileAppender);

hierarchy.Configured = true;

您需要在应用程序启动时调用一次此代码。输出日志还包括参数值。

这是通过Log4Net实现的;您需要添加参考。这将记录成功和失败的语句。您可以参加FileAppenderLogger课程,以满足您的其他要求。 This Q / A可能也有帮助。