Я немного опоздал, я знаю, но это помогает, и это не зависит от инструмента / базы данных / фреймворка.
Вместо этих допустимых опций я использую NH Interceptors .
Сначала реализуем класс, который расширяет NHibernate.EmptyInterceptor и реализует NHibernate.IInterceptor :
using NHibernate;
namespace WebApplication2.Infrastructure
{
public class SQLDebugOutput : EmptyInterceptor, IInterceptor
{
public override NHibernate.SqlCommand.SqlString
OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
{
System.Diagnostics.Debug.WriteLine("NH: " + sql);
return base.OnPrepareStatement(sql);
}
}
}
Тогда просто передайте экземпляр при открытии сеанса. Обязательно делайте это только в режиме DEBUG:
public static void OpenSession() {
#if DEBUG
HttpContext.Current.Items[SessionKey] = _sessionFactory.OpenSession(new SQLDebugOutput());
#else
HttpContext.Current.Items[SessionKey] = _sessionFactory.OpenSession();
#endif
}
И это все.
С этого момента ваши команды sql, подобные этим ...
var totalPostsCount = Database.Session.Query<Post>().Count();
var currentPostPage = Database.Session.Query<Post>()
.OrderByDescending(c => c.CreatedAt)
.Skip((page - 1) * PostsPerPage)
.Take(PostsPerPage)
.ToList();
.. отображаются прямо в окне вывода:
NH: выберите приведение (количество (*) как INT) как col_0_0_ из сообщений post0_
NH: выберите post0_.Id как Id3_, post0_.user_id как user2_3_, post0_.Title as
Title3_, post0_.Slug as Slug3_, post0_.Content as Content3_,
post0_.created_at как созданный 6_3_, post0_.updated_at как обновленный 7_3_,
post0_.deleted_at as Удалено8_3_ из сообщений post0_ упорядочить по
post0_.created_at desc limit? смещение?