LINQ-to-SQL CompiledQuery.Compile () con Update, Delete, Insert?

votos
6

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 ...

Publicado el 09/12/2008 a las 22:08
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
8

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 la conversión de un árbol de expresiones a 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.

Respondida el 09/12/2008 a las 22:46
fuente por usuario

votos
3

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

Respondida el 10/12/2008 a las 07:03
fuente por usuario

votos
0

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'.

Respondida el 10/12/2008 a las 12:43
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more