Quizás tenga sentido, dar vuelta la pregunta y encontrar casos de uso donde solo los procedimientos almacenados puedan hacer, lo que desea lograr. Quizás haya casos de uso en los que se destaquen los procedimientos almacenados.
Si hace la diferencia, estoy usando MSSQL y Entity Framework.
Mi conocimiento sobre EF es limitado, pero hasta donde puedo ver, EF es ( solo ) un ORM como cualquier otro; y afortunadamente es capaz de usar SQL sin formato .
Si tomo tus dos puntos principales:
Un informe complicado que tardó minutos en ejecutarse (esta era una página en una aplicación web). Descubrí que podía escribir SQL que era mucho más eficiente (solo tomaba unos segundos en ejecutarse) que lo que LINQ estaba proporcionando.
LINQ / EF se estaba quedando corto cuando hacía un informe. Y como notaron, fue SQL
mucho más rápido que usar un ORM. ¿Pero habla esto a favor de los procedimientos almacenados o solo en contra de usar el ORM para todo?
Su problema obviamente podría resolverse con SQL . Si esa consulta se almacenó y la versión controlada en su base de código hace, según su ejemplo, al menos no hay diferencia .
Una aplicación web necesitaba leer y escribir en algunas tablas en una base de datos separada que contenía mucha otra información confidencial que era irrelevante para la aplicación. En lugar de darle acceso a todo, utilicé un procedimiento almacenado que solo hace lo que se necesita y solo devuelve información limitada. La aplicación web podría tener acceso únicamente a este procedimiento almacenado, sin acceso a ninguna tabla, etc.
Lo mismo aquí: una cadena de conexión simple y una ACTUALIZACIÓN y su problema está solucionado. Este problema podría resolverse incluso con un ORM :
simplemente use un servicio web frente a la otra base de datos y se logra la misma compartimentación / aislamiento .
Así que no hay nada que ver aquí.
Mirando algunos puntos que otros han hecho:
Tiene unidades de trabajo complejas, que tal vez involucran muchas tablas, que no pueden integrarse fácilmente en una transacción utilizando las funciones de EF.
Pero SQL
puede hacer eso. No hay magia involucrada aquí.
Su base de datos no funciona bien con EF
Nuevamente: use EF cuando sea apropiado.
Debe trabajar con datos que cruzan los límites del servidor con servidores vinculados
No veo cómo ayudan los procedimientos almacenados. Entonces no puedo ver una ventaja de los procedimientos almacenados; pero tal vez alguien arroje algo de luz sobre eso.
Tiene escenarios de recuperación de datos muy complejos en los que se necesita SQL "bare metal" para garantizar un rendimiento adecuado
De nuevo: "Límites de EF ".
Su aplicación no tiene permisos CRUD completos en una tabla, pero se puede permitir que su aplicación se ejecute en un contexto de seguridad en el que su servidor confía
Bueno. Voy con un tal vez .
Hasta ahora solo se hizo medio punto a favor de los procedimientos almacenados.
Quizás haya consideraciones de rendimiento, que hablan a favor de los procedimientos almacenados.
1) El almacenamiento de consultas tiene el beneficio de una simple llamada al procedimiento almacenado que encapsula la complejidad. Como el planificador de consultas conoce la consulta, es "más fácil" optimizarla. Pero los guardados son con el actual sofisticado planificador de consultas _minimal.
Además de eso, incluso si hay un pequeño costo al usar consultas ad hoc , si sus datos están bien estructurados e indexados cuidadosamente, la base de datos es simplemente el cuello de botella de su aplicación. Entonces, incluso si hay un pequeño delta, es despreciable considerando otros factores.
2) Sin embargo, se argumentó para almacenar consultas complejas en un DB. Hay dos cosas a considerar:
a) las consultas complejas hacen un uso masivo de la infraestructura de base de datos, lo que aumenta los tiempos de respuesta para cualquier otra consulta. No puede ejecutar muchas consultas costosas en paralelo . Esto no habla de procedimientos almacenados a favor o en contra , sino contra consultas complejas .
b) Si la consulta lleva tiempo de todos modos, ¿por qué molestarse con pequeñas victorias de velocidad de un procedimiento almacenado?
tl; dr
Nada habla directamente en contra de los procedimientos almacenados. Entonces, usar procedimientos almacenados está bien, si te hace feliz.
Pero por otro lado: no podría imaginar un caso de uso adecuado que hable inequívocamente a favor.
¿Cuándo debo usar los procedimientos almacenados?
La respuesta correcta es: cuando quieras . Pero hay otras opciones.