2010-12-23 4 views
5

Estoy pensando en mover mi equipo de desarrollo a LINQ y al marco Entity. Si lo hago, ¿debería pensar en eliminar los SP?Son SP redundantes si se usan Linq y EF (mejor práctica)

Por lo general, nuestra arquitectura es (en orden);

SQL -> SPs -> Data Access Layer -> Business Objects -> GUI 

¿Debo estar en movimiento a algo similar a:

SQL -> Entity Framework Layer -> Business Objects (probably inherited from EF layer) -> GUI 

Voy a ver como mucho beneficio si lo dejo en SP? Además, ¿cuáles son las mejores prácticas?

Respuesta

19

No, no son redundantes.

Utilizamos Entity Framework para el 90% de nuestro código de acceso a datos.

que el 10% se utiliza en los siguientes escenarios:

  • Cuando el código es de peso en la lógica (demasiado complicado)
  • Cuando el rendimiento es esencial
  • Cuando varios registros deben ser afectados en solo transacción

LINQ-Entities (y LINQ, en general) es un marco brillante y consistente, pero hay veces que el SQL traducido no es tan óptimo como se esperaba - extra JOIN, CASE, etc. A veces, en estos escenarios, es prudente omitir la traducción del árbol de expresiones e ir directamente a SQL nativo.

Además, Entity Framework promueve procedimientos almacenados. Puede asignarlos en su modelo e incluso puede asignar procedimientos directamente a las operaciones CRUD en sus entidades.

Por lo tanto, en general, utilice EF para la mayoría de las operaciones simples (por ejemplo, CRUD), y utilice procedimientos almacenados cuando el rendimiento y la complejidad son factores.

HTH.

+1

Excelente gracias. Esto tiene sentido para mi. –

+0

@Mike Mengell - me alegro de poder ayudar. – RPM1984

1

Sí, deberías.

El mantenimiento de procedimientos almacenados creará grandes cantidades de fricción cuando se utiliza un ORM como Entity Framework. EF genera SQL válido y de alto rendimiento, y evita cosas como los ataques de inyección SQL.

Puede haber escenarios ocasionales en los que necesite ejecutar consultas inusuales que requieran combinaciones complejas o tablas múltiples; en estos casos es fácil exponer un método especial en su repositorio que invoca un procedimiento almacenado, pero para datos CRUD de propósito general acceso, solo deja que tu ORM genere el SQL en tiempo de ejecución y deja de preocuparte por él.

(usamos para hacer todo a través de procedimientos almacenados. Nos cambiamos a NHibernate año pasado, no han escrito un procedimiento almacenado desde entonces, y el cielo no se ha caído en o nada ...)

1

sólo tratar de pasar a EF parcialmente (operación CRUD, etc.), pero parte de tu código deja de usar SP. El segundo caso se puede aplicar a consultas pesadas, transacciones y cuando desee usar el código definido por usted. En general, EF proporciona la velocidad de desarrollo, pero algunas cosas específicas se desarrollan convenientemente mediante el uso de SP.Además, los SP dan siempre un impulso al rendimiento.

Cuestiones relacionadas