我希望能够对SqlCommand.ExecuteReader
之类进行try / catch,这样我就可以捕获ADO异常并使用比引发异常时所包含的更好的信息记录问题查询由NH。我尝试过各种方式到达那里,例如覆盖SqlClientDriver
以返回自己的SqlCommand
版本,但是在接口使用NH5更改为使用DbCommand
而非{ {1}}(因此我不能使用代理服务器)和IDbCommand
本身是密封的(因此我不能使用子类)这一事实使我受阻。
要明确:我不想简单地翻译异常。无论何时何地,我都希望获得有关原始查询的所有信息。
谢谢。
答案 0 :(得分:1)
NHibernate引发的异常包括查询本身。我不确定“所有信息”是什么意思。
其他选择是使用Log4Net记录生成的SQL:
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Root.RemoveAllAppenders();
FileAppender fileAppender = new FileAppender();
fileAppender.Name = "NHFileAppender";
fileAppender.File = config.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;
这将记录成功和失败的语句。您可以同时使用PatternLayout
和GetLogger
来获取有关查询的其他信息。