linq to sql - LINQ-to-SQL CompiledQuery.Compile() con Update, Delete, Insert?
precompiled (3)
Existe una gran diferencia. Las consultas de selección de Linq-To-SQL pueden ser grandes árboles de expresiones complejas. Es esto lo que puede llevar algún tiempo ''compilar''. En este caso, se fusiona con algún T-SQL que se puede ejecutar contra un servidor SQL. Por lo tanto, tiene sentido guardar en la memoria caché el resultado de una operación para que pueda volver a utilizarse.
Sin embargo, otras operaciones como Eliminar, Actualizar e Insertar son operaciones simples que no requieren que un árbol de expresiones se convierta en T-SQL (LINQ en sí mismo se trata de realizar consultas). Es lamentable que hayamos sido entrenados para pensar en el código SQL que realiza estas otras operaciones como ''consultas'', no estamos pidiendo realmente ninguna información.
Estas operaciones solo están definidas por el DataContext no por LINQ, por lo que el código para realizar estas funciones ya está compilado.
Todas,
Así que tengo todas mis consultas seleccionadas en LINQ-to-SQL convertidas a CompiledQueries para acelerar las cosas. Funciona muy bien hasta ahora para declaraciones seleccionadas, pero no he podido averiguar cómo precompilar las instrucciones de inserción, actualización o eliminación.
Por supuesto, cuando inserte, elimine o actualice en LINQ-to-SQL, debe usar el modelo de objetos. Pero, obviamente, en algún punto del camino genera una consulta, que sería bueno precompilar y almacenar en un miembro estático.
es posible? ¿Cómo es el rendimiento de LINQ para actualizaciones, eliminaciones e inserciones cuando no está precompilado? Pude ver que es mucho más rápido que los seleccionados, porque lo que hacen debajo es mucho más simple y menos "dinámico" ...
L2S usa "sp_executeSQL" por lo que después de ejecutarlo la primera vez estará en la memoria caché del plan de ejecución del procedimiento almacenado. Las ejecuciones posteriores (de la misma consulta, no los mismos params) reutilizarán el plan compilado de la memoria caché. Entonces, lo que está pidiendo se maneja automágicamente por SQL Server ''detrás de escena''.
Pienso que las tres únicas inserciones tendrían sentido para ser compiladas y reutilizadas porque eliminar es trivialmente simple (ELIMINAR DE LA CUADRO DONDE LA CLAVE ...) y ACTUALIZAR solo actualiza los campos que han cambiado y así varía según la operación de actualización.
[) amien