sql nhibernate logging output

sql - Como saber consulta generada por Fluent NHibernate



logging output (8)

Estoy usando linq to Nhibernate para lanzar alguna consulta de selección a la base de datos.

Mi pregunta es, ¿cómo sé, la consulta generada por Fluent NHibernate?


Definitivamente compre y use http://nhprof.com/ . Este es un producto increíble y no solo le muestra qué consultas se están ejecutando, sino que también le muestra los posibles problemas de rendimiento con sus asignaciones y consultas de NHibernate.


He encontrado 4 opciones para conocer la consulta de SQL en nhibernate y nhibernate fluido.

  1. Log - Joey V. dijo en respuesta a esta misma pregunta.
  2. ShowSql - dijo Kevin Berridge en respuesta a esta misma pregunta.
  3. NHProf - Este es un perfilador impresionante. NHProf
  4. Interceptor - Es realmente bueno ver sql. Podemos ponerlo en nuestra Salida de Visual Studio e incluso en el archivo de registro.

    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; } }


Puedes usar perfiladores de sql como este también.


Si desea que el SQL esté en log4net, asegúrese de configurar el registrador en la sección de configuración.

Pongo el paquete NHibernate en "INFO" para reducir el ruido y el NHibernate.SQL a todos, así puedo registrar todas las declaraciones SQL.

<logger name="NHibernate"> <level value="INFO" /> </logger> <logger name="NHibernate.SQL"> <level value="ALL" /> </logger>



También puedes enganchar en log4net.


Ver this Lo que necesitas es hibernate.show_sql .


Con Fluent NHibernate, puedes activar show_sql así:

Fluently.Configure() .Database( MsSqlConfiguration.MsSql2005.ShowSql().ConnectionString(...) )...

NHibernate ahora imprimirá cada declaración de SQL en Console.Out .