Est-il possible de suivre \ log le sql en utilisant Dapper?

dapper

Question

Est-il possible de transférer le fichier SQL généré dans le journal de débogage ou quelque chose? Je l'utilise dans une solution winforms pour que l'idée du mini-profileur ne fonctionne pas pour moi.

Réponse acceptée

J'ai eu le même problème et mis en place du code après avoir effectué des recherches, mais je n'avais pas de matériel prêt à l'emploi. Il y a un paquet sur nuget MiniProfiler.Integrations que je voudrais partager.

Mise à jour V2 : il prend en charge le fonctionnement avec d'autres serveurs de base de données, pour MySQL, il doit disposer de MiniProfiler.Integrations.MySql

Voici les étapes à suivre pour utiliser SQL Server:

1.Instant la connexion

var factory = new SqlServerDbConnectionFactory(_connectionString);
using (var connection = DbConnectionFactoryHelper.New(factory, CustomDbProfiler.Current))
{
 // your code
}

2.Après tous les travaux effectués, écrivez toutes les commandes dans un fichier si vous le souhaitez

File.WriteAllText("SqlScripts.txt", CustomDbProfiler.Current.ProfilerContext.BuildCommands());

Réponse d'expert

Dapper n'a pas actuellement de point d'instrumentation ici. C'est peut-être dû, comme vous le notez, au fait que nous (en tant qu'auteurs) utilisons un mini-profileur pour gérer cela. Cependant, si cela peut vous aider, les composants de base de mini-profileur sont conçus pour être indépendants de l'architecture, et je connais d'autres personnes qui l'utilisent avec winforms, wpf, wcf, etc. .

En théorie, il serait parfaitement possible d'ajouter un point de capture général, mais je suis préoccupé par deux choses:

  • (principalement) la sécurité: comme Dapper n'a pas de concept de contexte, il serait vraiment très facile pour le code malin de se connecter discrètement pour renifler tout le trafic SQL qui passe via dapper; Je n'aime vraiment pas le son (ce n'est pas un problème avec l'approche "décorateur", car l'appelant possède la connexion, d'où le contexte de journalisation)
  • performance (secondaire): mais, en vérité, il est difficile de dire qu'un simple contrôle des délégués (qui serait probablement null dans la plupart des cas) aurait beaucoup d'impact

Bien sûr, l’autre chose que vous pouvez faire est de voler le code d’encapsulation de connexion de mini-profileur et de remplacer les éléments du contexte du profileur par: Debug.WriteLine etc.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi