¿Cómo calificaría cada uno de ellos en términos de:
- Actuación
- Velocidad de desarrollo
- Código ordenado, intuitivo y mantenible
- Flexibilidad
- En general
Me gusta mi SQL y siempre he sido un fanático de ADO.NET y de los procedimientos almacenados, pero recientemente tuve una jugada con Linq to SQL y me impresionó la rapidez con que escribía mi capa DataAccess y decidí gastar ¿Alguna vez entendiste realmente Linq to SQL o EF ... o ninguno?
Solo quiero comprobar que no hay un gran defecto en ninguna de estas tecnologías que pueda inutilizar mi tiempo de investigación. Por ejemplo, el rendimiento es terrible, es genial para aplicaciones simples, pero solo puede llevarte lejos.
Actualización: ¿Puede concentrarse en EF VS L2S VS SP en lugar de ORM VS SP? Estoy interesado principalmente en EF VS L2S. Pero también estoy ansioso por compararlos con los procesos almacenados, ya que SQl es algo de lo que sé mucho.
fuente
Respuestas:
En primer lugar, si está comenzando un nuevo proyecto, vaya con Entity Framework ("EF"): ahora genera un SQL mucho mejor (más parecido a Linq to SQL) y es más fácil de mantener y más potente que Linq to SQL (" L2S "). A partir del lanzamiento de .NET 4.0, considero que Linq to SQL es una tecnología obsoleta. MS ha sido muy abierto sobre no continuar con el desarrollo de L2S.
1) rendimiento
Esto es difícil de responder. Para la mayoría de las operaciones de una sola entidad ( CRUD ), encontrará casi un rendimiento equivalente con las tres tecnologías. Tienes que saber cómo funcionan EF y Linq to SQL para usarlos al máximo. Para operaciones de alto volumen como consultas de sondeo, es posible que desee que EF / L2S "compile" su consulta de entidad de modo que el marco no tenga que regenerar constantemente el SQL, o puede encontrarse con problemas de escalabilidad. (ver ediciones)
Para las actualizaciones masivas donde está actualizando cantidades masivas de datos, el SQL sin procesar o un procedimiento almacenado siempre funcionará mejor que una solución ORM porque no tiene que reunir los datos a través del cable al ORM para realizar actualizaciones.
2) Velocidad de desarrollo
En la mayoría de los escenarios, EF eliminará los procesos SQL / almacenados desnudos cuando se trata de la velocidad de desarrollo. El diseñador de EF puede actualizar su modelo desde su base de datos a medida que cambia (previa solicitud), para que no tenga problemas de sincronización entre su código de objeto y el código de su base de datos. El único momento en el que no consideraría usar un ORM es cuando está haciendo una aplicación de tipo informe / panel de control donde no está realizando ninguna actualización, o cuando está creando una aplicación solo para realizar operaciones de mantenimiento de datos sin procesar en una base de datos.
3) Código ordenado / mantenible
Sin dudas, EF supera a SQL / sprocs. Debido a que sus relaciones están modeladas, las uniones en su código son relativamente poco frecuentes. Las relaciones de las entidades son casi evidentes para el lector para la mayoría de las consultas. Nada es peor que tener que pasar de una depuración de nivel a nivel o a través de múltiples SQL / nivel medio para comprender lo que realmente está sucediendo con sus datos. EF trae su modelo de datos a su código de una manera muy poderosa.
4) flexibilidad
Los procesos almacenados y el SQL sin procesar son más "flexibles". Puede aprovechar sprocs y SQL para generar consultas más rápidas para un caso específico extraño, y puede aprovechar la funcionalidad de base de datos nativa más fácilmente que con ORM.
5) general
No se deje atrapar por la falsa dicotomía de elegir un ORM versus usar procedimientos almacenados. Puede usar ambos en la misma aplicación, y probablemente debería hacerlo. Las grandes operaciones masivas deben ir en procedimientos almacenados o SQL (que en realidad puede ser llamado por el EF), y EF debe usarse para sus operaciones CRUD y la mayoría de las necesidades de su nivel medio. Quizás elija usar SQL para escribir sus informes. Supongo que la moraleja de la historia es la misma de siempre. Use la herramienta adecuada para el trabajo. Pero lo flaco es que EF es muy bueno hoy en día (a partir de .NET 4.0). Dedique un poco de tiempo real a leerlo y comprenderlo en profundidad y puede crear algunas aplicaciones increíbles de alto rendimiento con facilidad.
EDITAR : EF 5 simplifica un poco esta parte con las consultas LINQ compiladas automáticamente , pero para cosas de alto volumen real, definitivamente necesitará probar y analizar qué le queda mejor en el mundo real.
fuente
Procedimientos almacenados:
(+)
(-)
ORM:
(+)
(-)
La compensación general es entre tener una gran flexibilidad y perder mucho tiempo versus estar restringido en lo que puede hacer, pero hacerlo rápidamente.
No hay una respuesta general a esta pregunta. Es una cuestión de guerras santas. También depende de un proyecto en cuestión y sus necesidades. Elige lo que mejor te funcione.
fuente
As any abstraction can produce "high-level" developers having no idea how it works under the hood
su pregunta es básicamente O / RM vs mano escribiendo SQL
¿Usa un ORM o SQL simple?
Eche un vistazo a algunas de las otras soluciones O / RM que existen, L2S no es la única (NHibernate, ActiveRecord)
http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software
para abordar las preguntas específicas:
fuente
LINQ-to-SQL es una pieza notable de tecnología que es muy simple de usar y, en general, genera muy buenas consultas en el back-end. LINQ-to-EF estaba programado para suplantarlo, pero históricamente ha sido extremadamente difícil de usar y generó SQL muy inferior. No sé el estado actual de las cosas, pero Microsoft prometió migrar todas las bondades de L2S a L2EF, por lo que tal vez todo esté mejor ahora.
Personalmente, tengo una aversión apasionada por las herramientas ORM (vea mi diatriba aquí para más detalles), por lo que no veo ninguna razón para favorecer a L2EF, ya que L2S me da todo lo que espero necesitar de una capa de acceso a datos. De hecho, incluso creo que las características de L2S, como las asignaciones hechas a mano y el modelado de herencia, agregan una complejidad completamente innecesaria. Pero solo soy yo. ;-)
fuente
Es posible que desee considerar un enfoque completamente nuevo si lo que busca es la potencia y el rendimiento de los procedimientos almacenados, y el rápido desarrollo que proporcionan herramientas como Entity Framework.
Tomé SQL + para una prueba de manejo en un proyecto pequeño, y realmente es algo especial. Básicamente agrega lo que equivale a comentarios a sus rutinas SQL, y esos comentarios proporcionan instrucciones a un generador de código, que luego construye una biblioteca de clases orientada a objetos realmente agradable basada en la rutina SQL real. Tipo de marco de entidad similar a la inversa.
Los parámetros de entrada se vuelven parte de un objeto de entrada, los parámetros de salida y los conjuntos de resultados se vuelven parte de un objeto de salida, y un componente de servicio proporciona las llamadas al método.
Si desea utilizar procedimientos almacenados, pero aún desea un desarrollo rápido, es posible que desee echar un vistazo a estas cosas.
fuente