¿Hay alguna forma de rastrear \ log el sql usando Dapper?

dapper

Pregunta

¿Hay alguna manera de volcar el sql generado en el registro de depuración o algo así? Lo estoy usando en una solución de winforms para que la idea del miniperfil no me funcione.

Respuesta aceptada

Obtuve el mismo problema e implementé un código después de hacer una búsqueda, pero no tenía nada listo para usar. Hay un paquete sobre nuget MiniProfiler.Integrations que me gustaría compartir.

Actualización V2 : admite trabajar con otros servidores de bases de datos, para MySQL requiere tener MiniProfiler.Integrations.MySql

A continuación se detallan los pasos para trabajar con SQL Server:

1. Instalar la conexión

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

2. Después de todos los trabajos realizados, escriba todos los comandos en un archivo si lo desea

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

Respuesta experta

Dapper actualmente no tiene un punto de instrumentación aquí. Esto tal vez se deba, como usted nota, al hecho de que nosotros (como autores) usamos miniperfil para manejar esto. Sin embargo, si ayuda, las partes principales del miniperfil están realmente diseñadas para ser neutrales a la arquitectura, y sé de otras personas que lo utilizan con winforms, wpf, wcf, etc., que le darían acceso a la envoltura de conexión de perfilado / rastreo. .

En teoría, sería perfectamente posible agregar un punto de captura general, pero me preocupan dos cosas:

  • (principalmente) de seguridad: ya que dapper no tiene un concepto de contexto, sería realmente muy fácil para el código maligno adjuntar silenciosamente para olfatear todo el tráfico sql que pasa por dapper; Realmente no me gusta el sonido de eso (esto no es un problema con el enfoque de "decorador", ya que el que llama posee la conexión, de ahí el contexto de registro)
  • rendimiento (secundario): pero ... en verdad, es difícil decir que un simple cheque de delegado (que presumiblemente sería null en la mayoría de los casos) tendría mucho impacto

Por supuesto, la otra cosa que podría hacer es: robar el código de envoltura de conexión del miniperfil y reemplazar el contenido de contexto de Debug.WriteLine con solo: Debug.WriteLine etc.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow