据我所知,有三种方法可以读取NHibernate生成的sql脚本: 1. log4net 2. sql profiler 3. show_sql = true
这里我只想谈谈第三个,因为它说我可以在Visual Studio的输出窗口中读取sql。但无论我做什么,我都什么都看不见?!
有人说“show_sql = true”只是意味着“Console.WriteLine()”,所以我发布了一个问题here。
我不得不说我得不到我想要的东西,所以我在这里总结一下我的问题: 在Web应用程序的输出窗口中:
如果是,怎么样?
答案 0 :(得分:2)
我认为Visual Studio不会显示类库或网站项目的控制台输出。我所做的是配置log4net将NHibernate的SQL写入文本文件,然后在Visual Studio中打开该文件。使用正确的配置,VS将通过单击窗口显示文件的更新。
在你的Web.config(或app.config)中,定义log4net部分,让NHibernate很好地格式化SQL,创建一个文本文件appender,并在那里指导NHibernate消息:
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="format_sql">true</property>
</session-factory>
</hibernate-configuration>
<log4net>
<appender name="NHibernateLogFile" type="log4net.Appender.FileAppender">
<file value="../Logs/NHibernate.log" />
<appendToFile value="false" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss.fff}%m%n==========%n" />
</layout>
</appender>
<logger name="NHibernate" additivity="false">
<level value="WARN" />
<appender-ref ref="NHibernateLogFile" />
</logger>
<logger name="NHibernate.SQL" additivity="false">
<level value="DEBUG" />
<appender-ref ref="NHibernateLogFile" />
</logger>
</log4net>
</configuration>
然后在Visual Studio中打开NHibernate.Log。由于上面的MinimalLock,Visual Studio可以在log4net写入的同时读取该文件。当您在窗口中单击时,VS将重新加载该文件。请务必在部署网站或应用程序时将其关闭。