【问题标题】:NHibernate: How to show the generated SQL-statements in the windows consoleNHibernate:如何在 Windows 控制台中显示生成的 SQL 语句
【发布时间】:2010-03-19 13:08:51
【问题描述】:
 return Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008
                              .ConnectionString(c => c
                                                         .Database(Database)
                                                         .TrustedConnection()
                                                         .Server(Server)
                              ).ShowSql())
                .ExposeConfiguration(c => c.SetProperty("current_session_context_class", "web"))
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<TeamMap>()).BuildConfiguration();

我有一个网络应用程序。此配置不起作用。

我还有一个控制台应用程序,负责写出所有生成的 SQL。

如何获取生成的 SQL 命令?

提前致谢!

【问题讨论】:

  • Log4net 已被 NHibernate 使用并记录 sql 语句
  • 您希望如何在 Web 应用中查看控制台?
  • 我想在服务器端显示一个控制台应用程序,该应用程序显示生成的 sql,例如 SQL Server Profiler 或 Ayends NHibernate Logger。
  • 强烈建议您不要在生产环境中运行 ShowSQL。它会大大减慢执行速度。
  • 所以你的意思是你想在控制台应用程序中查看日志?在这种情况下,只需解析控制台应用程序中的日志。

标签: sql nhibernate log4net


【解决方案1】:

由于 NHibernate 已经通过 log4net 记录 SQL,这是最简单的方法。由于您不需要日志文件,请配置跟踪附加程序并通过ASP.NET Trace 的常用方法查看结果。通过在代码中进行配置,可以确保在不再需要的时候它就消失了。

var appender = new log4net.Appender.AspNetTraceAppender();
appender.Layout = new log4net.Layout.PatternLayout{ ConversionPattern="%-5level - %message%newline" };
appender.Threshold = log4net.Core.Level.Info;
log4net.Config.BasicConfigurator.Configure( appender );

如果您只需要 SQL 语句,则只需要来自 NHibernate.Loader.Loader 信息级别的消息。

Trace 是 ASP.NET 中的一个日志工具,其结果可以在生成消息的页面末尾或通过 ~/trace.axd 看到

如果跟踪输出对于您的需要来说过于冗长,或者您出于任何原因不想这样做,那么还有其他附加程序可以通过网络发送日志消息。

UDPAppender 通过 UDP 在网络上发送日志消息。

TelnetAppender 让您可以通过 telnet 连接到 log4net。要查看消息,您可以从控制台窗口 telnet 到您的应用程序。

var appender = new log4net.Appender.TelnetAppender{ Port=23 };

【讨论】:

  • 对不起,你误会了我。我不想将日志写入 ASP.NET。我只有一个 ASP.NET MVC 网站。我想启动一个控制台应用程序,分别显示生成的 sql。
  • Rookian,Lachlan 没有误解您,他为您提供了您可以拥有的最简单的可用选项。 a) 无论您有 ASP.NET MVC 还是 ASP.NET Webforms,它都能以这种方式工作,b) 他向您展示了在 IIS 上运行的 ASP.NET 的局限性。显然,当 ASP.NET 根本无法以这种方式工作时,您正在以 Windows 窗体的思维方式思考。控制台应用程序和 ASP.NET 应用程序不在同一个应用程序环境中运行。
  • @Jon 如果@Rookian 不知道 ASP.NET Trace 工具,他认为我建议使用记录器将内容发送到网站的假设是完全可以理解的。从那时起,第一个代码块之后的所有内容都已添加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 2015-11-09
  • 2016-01-03
相关资源
最近更新 更多