Как узнать запрос, сгенерированный Fluent NHibernate
-
03-07-2019 - |
Вопрос
Я использую linq для Nhibernate для запуска некоторых запросов select к базе данных.
Мой вопрос: откуда мне знать запрос, сгенерированный 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/
Я нашел 4 варианта, чтобы узнать SQL-запрос в nhibernate и свободно nhibernate.
<Ол>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. Р>