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