web-dev-qa-db-fra.com

Comment enregistrer les 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 n'apparaît pas dans la fenêtre de sortie de Visual Studio. Est-il obligatoire d'installer log4net ? Ou devrait show_sql travailler seul?

39
Nicolas Cadilhac

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

<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 cela correctement ici. Voir ce lien pour l'exemple de code

58
LordHits

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

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

show_sql sorties vers Console.Out - il est très utile lors de l'exécution de tests d'intégration

8
Matt Hinze

Depuis NHibernate 3.0, vous pouvez utiliser une configuration loquace

configuration.DataBaseIntegration(x =>
{
  x.LogSqlInConsole = true;
  x.LogFormattedSql = true;
});

Autres informations disponibles sur http://fabiomaulo.blogspot.com.ar/2009/07/nhibernate-configuration-through.html

4
Fabio Maulo

Il existe quelque chose appelé profileur NHibernate que vous pouvez utiliser.

http://nhprof.com/

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

4
Sara Chipps