39 votes

Comment enregistrer des appels SQL avec NHibernate sur la console de Visual Studio?

J'ai le fichier de configuration suivant pour NHibernate :

 <?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.connection_string">Server=.\SQLEXPRESS;Database=mydb;Integrated Security=True;</property>
    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.release_mode">auto</property>
    <property name="adonet.batch_size">500</property>

    <property name="show_sql">true</property>

  </session-factory>
</hibernate-configuration>
 

Mais le SQL ne s'affiche pas dans la fenêtre de sortie de Visual Studio. Est-il obligatoire d'installer log4net ? Ou est-ce que show_sql devrait travailler seul?

58voto

LordHits Points 3006

Pour afficher le code SQL dans la fenêtre de sortie de Visual Studio, configurez log4net pour utiliser TraceAppender dans votre configuration log4net. Cette:

 <appender name="DebugSQL" type="log4net.Appender.TraceAppender">
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
 

Ensuite ceci:

 <logger name="NHibernate.SQL" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="DebugSQL" />
</logger>
 

EDIT: Je n'arrive pas à formater ceci correctement ici. Voir ce lien pour un exemple de code

17voto

Nathan Baulch Points 7994

Pour ceux qui préfèrent le code plutôt que la configuration, l'extrait suivant créera l'enregistreur NH approprié avec un simple appender de console.

 var hierarchy = (Hierarchy) LogManager.GetRepository();
var logger = (Logger) hierarchy.GetLogger("NHibernate.SQL");
logger.AddAppender(new ConsoleAppender {Layout = new SimpleLayout()});
hierarchy.Configured = true;
 

8voto

Matt Hinze Points 9686

show_sql sorties en Console.Out - c'est plus utile lors de l'exécution de tests d'intégration

4voto

Sara Chipps Points 4391

Vous pouvez utiliser le profileur NHibernate.

http://nhprof.com/

c'est cher mais ça marche et ça a un essai de 30 jours.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X