¿Cómo veo el SQL generado por nHibernate? versión 1.2¿Cómo veo el SQL generado por nHibernate?
Respuesta
Usted puede poner algo como esto en su app.config archivo/web.config:
en el nodo configSections:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
en el nodo de configuración:
<log4net>
<appender name="NHibernateFileLog" type="log4net.Appender.FileAppender">
<file value="logs/nhibernate.txt" />
<appendToFile value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n" />
</layout>
</appender>
<logger name="NHibernate.SQL" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="NHibernateFileLog"/>
</logger>
</log4net>
Y no se olvide de llamar al
log4net.Config.XmlConfigurator.Configure();
en el inicio de la aplicación, o para poner
[assembly: log4net.Config.XmlConfigurator(Watch=true)]
en los AssemblyInfo.cs
En los ajustes de configuración, establezca la propiedad "show_sql" true.
Utilice el servidor de perfil sql.
EDITAR (1 año más tarde): Como @Toran Billups afirma a continuación, el perfilador de NHibernate Ayende escribió que es muy genial.
Sí mucho más fácil que vadear MB de archivos de registro. –
En la configuración, configure la propiedad "show_sql" en verdadero. Esto hará que el SQL salga en archivos de registro de NHibernate cortesía de log4net.
Agradable. Me olvide de eso. * haga clic en * –
¿Por qué no es esta la respuesta aceptada? :) Gracias por el consejo. –
Esto no muestra SQL completo para mí. No veo valores reales, algo como esto: 'SELECT application0_.ApplicationId como aplicación === App1_101_1_, application0_.ApplicationNumberCounty como ApplicationNu2_101_1 ...' –
Hay una buena referencia para el registro NHibernate en: How to configure Log4Net for use with NHibernate. Incluye información sobre el registro de todas las sentencias SQL generadas por NHibernate.
Nhibernate Profiler es una opción, si tiene que hacer algo serio.
También puedes probar NHibernate Profiler (prueba de 30 días si nada más). Esta herramienta es la mejor en mi humilde opinión.
Esto no sólo mostrará el SQL generado, sino también advertencias/sugerencias/etc
Deffo - +1. ¡No existía cuando se hizo esta pregunta! –
No funciona con SQL CE (a pesar de que se anuncia como tal), solo FYI –
Si está utilizando SQL Server (no urgente), se puede tratar de SQL Server.
Estoy un poco tarde, lo sé, pero este es el truco y es herramienta/db/framework independiente. En lugar de esas opciones válidas, uso NH Interceptors.
Al principio, implementar una clase que se extiende NHibernate.EmptyInterceptor e implementa 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);
}
}
}
A continuación, sólo tiene que pasar una instancia cuando se abre la sesión. Asegúrese de hacerlo solo cuando en DEBUG:
public static void OpenSession() {
#if DEBUG
HttpContext.Current.Items[SessionKey] = _sessionFactory.OpenSession(new SQLDebugOutput());
#else
HttpContext.Current.Items[SessionKey] = _sessionFactory.OpenSession();
#endif
}
Y eso es todo.
A partir de ahora, sus comandos sql como estos ...
var totalPostsCount = Database.Session.Query<Post>().Count();
var currentPostPage = Database.Session.Query<Post>()
.OrderByDescending(c => c.CreatedAt)
.Skip((page - 1) * PostsPerPage)
.Take(PostsPerPage)
.ToList();
.. se muestran directamente en la ventana de salida:
NH: selecto elenco (count (*) como INT) como col_0_0_ de mensajes post0_
NH: seleccione post0_.Id como Id3_, post0_.user_id como user2_3_, post0_.Title como Title3_, post0_.Slug como Slug3_, post0_.Content como Content3_, post0_.created_at como created6_3_, post0_.updated_at como updated7_3_, post0_.deleted_at como deleted8_3_ de mensajes post0_ ordenar por post0_.created_at desc limit? compensar ?
- 1. Cómo obtener el sql generado por el marco de entidad
- 2. ¿Cómo ver SQL generado desde Entity Framework?
- 3. ¿Puede NHibernate comprobar si se ha generado el esquema db?
- 4. ¿Cómo obtener NHibernate SQL generado en código en tiempo de ejecución?
- 5. ¿Cómo veo los comandos ejecutados por GNU?
- 6. Cómo restaurar el archivo SQL generado por MySQLDump usando el símbolo del sistema
- 7. ¿Cómo se intercepta el SQL generado de Hibernate?
- 8. ¿Mi SQL generado por Entity Framework se ejecuta dos veces?
- 9. ¿Por qué NHibernate genera el SQL parametrizado tan rápido como un procedimiento almacenado?
- 10. Función SQL personalizada para el dialecto NHibernate
- 11. Cómo eliminar por lotes con nhibernate?
- 12. ¿Cómo veo las conexiones de SQL Server activas?
- 13. ¿Graficar el DAG generado por make?
- 14. NHibernate evict por id
- 15. Java: cómo sangrar XML generado por Transformer
- 16. Registro NHibernate Consultas SQL
- 17. Cómo guardar un svg generado por raphael
- 18. SQL Azure Federation en NHibernate
- 19. ¿Cómo puedo embellecer el código de Perl generado por Perl?
- 20. ¿Cómo no se genera el archivo generado por T4 predeterminado?
- 21. cómo guardar el contenido generado por DOMPDF en un archivo?
- 22. ¿Cómo cambio el contexto REST generado por enunciate?
- 23. Cómo analizar el archivo WERInternalMetadata.xml generado por Windows Crash Reporter?
- 24. Cómo inspeccionar bytecode java generado por Clojure desde el repl?
- 25. cómo generar xlsx generado por Openpyxl en el navegador?
- 26. NHibernate LINQ grupo por grupo no correctamente en SQL Server
- 27. scripts de Nhibernate y sql
- 28. NHibernate vs LINQ to SQL
- 29. cómo ver SQL generado desde una consulta de linq
- 30. equals() generado por Eclipse: getOuterType()?
Encontré que el SQL se registró en el nivel DEBUG, por lo que es posible que desee asegurarse de que su nivel de registrador es DEPURAR. – stimms
¡corrección hecha! – mathieu
Mi objetivo final es leer SQL de NHibernate, ver [aquí otra publicación] (http://stackoverflow.com/questions/8244083/how-to-read-sql-generated-by-nhibernate-in-visual-studio) – freeflying