Comment configurer Couramment NHibernate pour la sortie des requêtes de Trace ou de Débogage au lieu de la Console?
Comment configurer Couramment NHibernate pour la sortie des requêtes de Trace ou de Débogage au lieu de la Console?
Je suis en utilisant MsSqlConfiguration.MsSql2008.ShowSql()
mais il n'a pas de paramètres et je ne trouve rien sur Google.
Vous devez vous connecter pour publier un commentaire.
Je peux le voir sur le forum et le blog postes partout que beaucoup d'autres avant moi ont cherché un moyen d'obtenir les instructions SQL qu'ils sont préparés pour l'exécution. La réponse est généralement quelque chose le long des lignes de "vous ne pouvez pas", ou "vous ne devriez pas".
De savoir si je dois ou pas, qu'est ce que je voulais.
Après des heures de recherche, d'enquête et de tentatives infructueuses, et finalement, je suis venu avec cette.
Écrire un intercepteur:
Bien sûr, vous n'avez pas à
Trace.WriteLine()
ici, vous pouvez l'écrire dans un fichier journal, ou tout autre chose dont vous avez besoin.Dans votre gestionnaire de connexion, branchez votre Intercepteur de la sorte:
Ce n'est pas compliqué. De mon point de vue, certainement plus facile que d'essayer d'obtenir tout cela XML poussé à travers Couramment à NHibernate - depuis Couramment résumés le fichier XML à l'écart.
Gardez à l'esprit, vous ne pouvez avoir qu'un seul Intercepteur - de sorte que vous pourriez avoir besoin pour intégrer cette fonctionnalité à votre Intercepteur, si vous en avez déjà un. Sur cette note, vous pouvez lui donner une plus large nom - par exemple, MyAppInterceptor, afin de ne pas impliquer un but précis, parce que vous pouvez ajouter d'autres fonctionnalités plus tard.
Espérant que cela sera utile à quelqu'un d'autre! 🙂
?
(points d'interrogation) à la place des valeurs dans les requêtes commeSELECT * FROM MyObject WHERE Id = ?
. Je vois qu'il ya unIEnumerable NHibernate.SqlCommand.SqlString.GetParameters()
sql.ToString()
avecbase.OnPrepareStatement(sql)
base.OnPrepareStatement(sql)
encore sorties?
s. Des idées?Vous voudrez probablement utiliser log4net, pas ShowSql. Voici la configuration pour envoyer des requêtes à Debug:
Et ensuite appeler à partir de votre code avant l'ouverture d'un NHibernate session:
Lorsque vous ajoutez une référence à la log4net DLL, assurez-vous de définir sa "Copie Locale" à la propriété "vrai".
Ce n'est pas spécifique à FluentNHibernate, il fonctionne de la même quelle que soit la variante de NHibernate.
Je n'ai pas essayé avec SQL Server, mais avec SQLite, le code suivant va montrer SQL généré dans le Sortie fenêtre (Debug menu -> Windows -> Sortie, dans VS2008).
Le "Spectacle de sortie de:" zone de liste déroulante dans la fenêtre de Sortie doit être réglé sur "Debug" - VS2008 l'a fait pour moi automatiquement.
Un mot d'avertissement - en activant cette option peut ralentir considérablement l'exécution.