1

我希望能够进行 try/catchSqlCommand.ExecuteReader之类的操作,以便我可以捕获 ADO 异常并使用比 NH 抛出的异常中包含的更好的信息记录有问题的查询。我尝试以各种方式到达那里,比如重写以返回SqlClientDriver我自己的密封(所以我不能使用子类),我被阻碍了。SqlCommandDbCommandIDbCommandSqlCommand

需要明确的是:我不想简单地翻译异常。无论我在哪里捕获到原始查询,我都想要它的所有信息。

谢谢。

4

1 回答 1

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;

这会记录成功和失败的语句。您可以使用PatternLayoutaandGetLogger来获取有关查询的更多信息。

于 2019-01-10T06:29:21.600 回答