如何知道 Fluent NHibernate 生成的查询
-
03-07-2019 - |
题
我正在使用 linq to Nhibernate 向数据库发起一些选择查询。
我的问题是,我怎么知道 Fluent NHibernate 生成的查询?
解决方案
如果您希望 SQL 位于 log4net 中,请确保在配置部分中设置记录器。
我将 NHibernate 包放在“INFO”处以减少噪音,并将 NHibernate.SQL 放在所有位置,以便我可以记录所有 SQL 语句。
<logger name="NHibernate"> <level value="INFO" /> </logger> <logger name="NHibernate.SQL"> <level value="ALL" /> </logger>
其他提示
使用Fluent NHibernate,您可以像这样打开 show_sql
:
Fluently.Configure()
.Database( MsSqlConfiguration.MsSql2005.ShowSql().ConnectionString(...) )...
NHibernate现在将每个sql语句打印到 Console.Out
。
您可能还会发现这个有用的 http://nhprof.com/
我在nhibernate和fluent nhibernate中找到了4个知道sql查询的选项。
- 日志 - Joey V.在回答同样的问题时说。
- ShowSql - Kevin Berridge在回答同样的问题时说。
- NHProf - 这是一个很棒的探查器。 NHProf
-
Intercepter - 看到sql真的很棒。我们可以把它放在我们的Visual Studio输出中,甚至放在日志文件中。
ISessionFactory sf = Fluently.Configure() .Database(MySQLConfiguration.Standard.ConnectionString(ConnectionString).ShowSql()) .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Stock>()) .ExposeConfiguration(c => c.SetInterceptor(new ABCInterceptor())) .BuildSessionFactory(); public class ABCInterceptor : EmptyInterceptor { public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql) { Trace.WriteLine(sql.ToString()); return sql; } }
醇>
请参阅此。你需要的是 hibernate.show_sql
。
你也可以使用像这个的sql profilers。
绝对购买并使用 NHProf 。这是一个很棒的产品,不仅可以向您显示正在运行的查询,还可以向您显示NHibernate映射和查询的任何潜在性能问题。
你也可以挂钩log4net。
不隶属于 StackOverflow