c# - studio - ¿Cómo puede ver el sql que causa un error en SubmitChanges en LINQ to SQL?
linq to sql visual studio 2017 (6)
Cuando me encuentro con estos problemas de tipo, he estado usando el generador de perfiles SQL. Básicamente encender el generador de perfiles, poner un punto de interrupción en el guardar / actualizar, borrar el generador de perfiles y luego ejecutar solo esa declaración. A partir de ahí tengo todo el SQL que se ejecutó y puedo ver lo que se generó. [En general, he estado haciendo esto a través de DataServices, por lo que .SaveChanges () es una ubicación muy conveniente para poner el punto de interrupción]
Tengo algunos LINQ to SQL que a veces arroja un
"No se puede insertar una fila de clave duplicada en el objeto ''dbo.Table'' con el índice único ''IX_Indexname''. La declaración ha finalizado".
¿Hay alguna manera de activar el registro o, al menos, depurar en el contexto de datos para ver qué sql se está ejecutando en el momento en que se produce el error?
Actualización: debería haber mencionado que sé sobre el método GetChangeSet()
, me preguntaba si hay una propiedad en el DataContext que muestre el último SQL que se ejecutó o una propiedad en la excepción SQL que muestre el SQL.
Lo curioso de este error es que en los conjuntos de cambios, solo hay una actualización y el único campo que cambia es un campo de fecha y hora que no está en el índice que causa el error.
Escriba una prueba para aislar la pieza o piezas de código que causan todos los problemas. Establecer DataContext.Log = Console.Out. Ejecute la prueba con un testrunner (NUnit, MSTest, etc.). Los testrunners normalmente muestran todo lo impreso en Console.Out junto con los resultados de la prueba.
Puede usar el generador de perfiles de SQL para ver el SQL mientras golpea el servidor SQL.
Si desea ver qué hay realmente en los conjuntos de cambios, debe usar:
context.GetChangedSet();
MSDN: http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.getchangeset.aspx
A continuación, puede ver cada instrucción SQL antes de enviarla al servidor.
Su último punto de llamada es usar la capacidad de VS 2008 para depurar a través del framework .NET.
Tengo que estar de acuerdo con Bradley Grainger usando la propiedad DataContext.Log es la mejor manera de ver el sql ejecutado.
Una forma simple de hacerlo es usar la propiedad DataContext.Log :
using (MyDataContext ctx = new MyDataContext())
{
StringWriter sw = new StringWriter();
ctx.Log = sw;
// execute some LINQ to SQL operations...
string sql = sw.ToString();
// put a breakpoint here, log it to a file, etc...
}
usa el Analizador de SQL Es tu amigo y se envía con SQL. puede ver cualquier instrucción SQL que se esté ejecutando, con control total sobre el filtrado.