我正在使用 linq to Nhibernate 来触发一些对数据库的选择查询。
我的问题是,我怎么知道 Fluent NHibernate 生成的查询?
我正在使用 linq to Nhibernate 来触发一些对数据库的选择查询。
我的问题是,我怎么知道 Fluent NHibernate 生成的查询?
使用 Fluent NHibernate,您可以像这样打开show_sql
:
Fluently.Configure()
.Database( MsSqlConfiguration.MsSql2005.ShowSql().ConnectionString(...) )...
NHibernate 现在会将每个 sql 语句打印到Console.Out
.
您可能还会发现这很有用http://nhprof.com/
如果您希望 SQL 在 log4net 中,请确保在配置部分中设置记录器。
我将 NHibernate 包放在“INFO”以减少噪音,并将 NHibernate.SQL 放在所有位置,以便我可以记录所有 SQL 语句。
<logger name="NHibernate"> <level value="INFO" /> </logger> <logger name="NHibernate.SQL"> <level value="ALL" /> </logger>
我找到了 4 个选项来了解 nhibernate 和流利的 nhibernate 中的 sql 查询。
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 分析器。
绝对购买和使用NHProf。这是一个很棒的产品,它不仅向您展示了正在运行的查询,而且还向您展示了您的 NHibernate 映射和查询的任何潜在性能问题。
你也可以挂在 log4net 中。