2008-11-06 22 views
9

He oído decir que Entity Framework es excesivo o que es difícil de aprender en comparación con LinqToSql.¿Cómo es .net Entity Framework overkill versus LinqToSql?

Me pregunto de qué manera? Usé LinqToSql y me gusta. Entonces, estoy probando el EF y por las cosas que estoy haciendo, parecen casi exactamente iguales. Los espacios de nombre y los nombres de los métodos son diferentes, pero hasta ahora no veo nada que haga que EF sea más difícil que LinqToSql.

Estoy seguro de que si empiezo a hacer más cosas de compilación se vuelve más complejo. Pero, de nuevo, probablemente no pueda hacer lo mismo con LinqToSql en absoluto, así que lo veo como un plus para el EF en caso de que quiera hacer algo más complejo.

¿EF usa más recursos que LinqToSql tanto que no debería usarlo si todo lo que necesito es la funcionalidad LinqToSql?

Actualización: Hice algunas pruebas y mis pruebas parecen apuntar a Linq a las entidades que funcionan mejor que Linq a SQL.

Primero eliminé 1000 registros de una sola tabla, agregué 1000 registros, edité 1000 registros y luego los relacioné con un DataView. LinqToSQL: 5 segundos LinqToEntities: 2 segundos

Realicé la misma prueba utilizando dos tablas unidas y los resultados fueron similares.

Mis pruebas parecen apoyar otro post: Linq To Sql vs Entity Framework Performance

Actualización 2:

Gracias por las respuestas. Me parece que Linq to Entities no es realmente excesivo contra Linq to SQL. Después de investigar más, creo que ir con Linq to Entities es el camino a seguir. Parece tener un mejor rendimiento.

Creo que las declaraciones de "exceso" que he escuchado se hacen porque Linq to Entities puede hacer mucho más que Linq To SQL y requiere más configuración (aproximadamente 1 línea más en el web.config). También hay cosas pequeñas que Linq to Entities hace diferente de Linq a SQL que pueden hacer que alguien sienta que Linq to Entities es más complicado. Pero una vez que aprendes cómo hacer las cosas, parece que Linq to Entities no es más complicado que Linq to SQL.

Respuesta

3

Mi respuesta: Haga una simple comparación del tiempo necesario para realizar una secuencia simple de Obtener/Editar/Actualizar. Creo que encontrará que LINQ to SQL es dos veces más rápido. Hice un proyecto de comparación rápido cuando estaba investigando las diferencias.
Los resultados donde: Entity Framework 8.700 milisegundos LINQ a SQL 3.100 milisegundos conjuntos de datos de 2.000 milisegundos

Así que para mí era una cuestión sencilla. Usa DataSets o usa Linq-Sql. ¡Entity Framework ni siquiera tuvo en cuenta!

link text

+0

Finalmente llegué a hacer una prueba y me sorprendió en el sentido opuesto. No tengo idea de si mi prueba es válida, pero primero elimino 1000 registros, agregué 1000 registros, edité 1000 registros y luego los relacioné con un DataView. LinqToSQL: 5 segundos LinqToEntidades: 2 segundos – dtc

+1

¿Conjuntos de datos? Ugh ... Hay muchos otros frameworks disponibles (por ejemplo, Subsonic, NHibernate, etc.).Por no mencionar el desarrollo personalizado, que a menudo prefiero. Nunca me encontré con un proyecto que usara DataSets que consideré limpiado de manera remota. – senfo

+0

Además de la prueba de rendimiento, también debe ver cuánto tiempo y esfuerzo le lleva hacer que cualquier marco haga lo que quiera. Como senfo señaló, los DataSets pueden ser rápidos, pero no son tan buenos para trabajar. –

12

Corrígeme si me equivoco, pero el marco de la entidad sólo debe entrar en juego cuando se necesita para transformar los objetos de back-end, como cuando estás combinando tablas de distintas fuentes de datos, la división tablas, etc. Agrega la capa de entidad para que pueda ocultar todas las tuberías y simplemente tratar con sus entidades limpias. Si solo lo usa 1 contra 1 en sus tablas como lo haría en LINQ to SQL, entonces estoy seguro de que la capa de complejidad que no está utilizando disminuirá la velocidad. Parece que LINQ to SQL es la herramienta adecuada para el trabajo correcto en su caso hasta que tenga necesidades de fuente de datos más complejas.

+0

LINQ to SQL siempre es la herramienta correcta para el trabajo correcto ;-p – Svish

3

Antes de sumergirse en Linq a SQL, consulte this article por su administrador de programa. Él plantea una pregunta directa "¿LINQ to SQL Dead?" La respuesta no es tan simple. Definitivamente no es "no". Me parece más a "probablemente sea".

Sugeriría antes de sumergirse en EF (ahora llamado Linq To Entities) considerar seriamente NHibernate, pero ese es mi sesgo personal.

+0

No he usado NHibernate, pero un ex compañero de trabajo mío tuvo que cambiar de usar Linq-to-SQL a NHibernate en su nuevo empleador y odia eso. En su opinión, NHibernate es mucho menos poderoso. –

+0

Una cosa es decir que NHibernate es mucho menos poderoso. Otra cosa es dar ejemplos de por qué. Según mi experiencia, la mayoría de las personas que no les gusta NHibernate cambian de opinión después de obtener más información al respecto. – senfo

8

Linq to SQL y Entity Framework son bestias conceptualmente diferentes y debe elegir según cómo se ajusten a sus necesidades en lugar de microbenchmarks. Incluso si Entity Framework fue más lento, es el enfoque del equipo de ADO.NET en Microsoft y se mejorará muchas veces. Linq-to-SQL está efectivamente congelado.

Conceptualmente son diferentes en que Linq-to-SQL es solo una forma de realizar consultas de bases de datos utilizando Linq. Suena bastante obvio, pero el punto es: estás accediendo a los datos, estructurados según el modelo de base de datos de la misma. Aunque los FK se transforman adecuadamente, aún tiene objetos en exceso donde los datos se normalizaron en tablas diferentes. Cada consulta que escribes tiene que lidiar con ese tipo de cosas.

Entity Framework le permite construir declarativamente una capa que represente sus datos de la manera que debería ser representada en la memoria, trayendo datos de múltiples tablas en un solo objeto donde corresponda; representando relaciones de muchos a muchos como propiedades de colección, etc. Y las consultas que escriba serán para este modelo y serán mucho más claras y obvias en su propósito (¡no más de 15 combinaciones de tablas!).

O'Reilly tiene un amplio libro que sale de Entity Framework el 15 de enero de 2009 (vista previa disponible ahora en Roughcuts) si no está seguro sobre el uso de Entity Framework: la documentación de MSDN es muy mala en este momento, lo que hace proponiéndolo aún más difícil. Creo que vale la pena usarlo a largo plazo para todos los proyectos menos triviales (y personalmente, si estuviera escribiendo algo trivial, simplemente usaría ADO.NET2 directamente y me olvidaría de Linq).

4

Tenga cuidado, LinqToEntities puede hacer cosas realmente interesantes si utiliza consultas con, por ejemplo, group by. Nunca logré que LinqToEntities transformara un grupo en un grupo SQL real, sino que genera bloques de código masivos que pueden ser realmente ineficaces.

Por ejemplo, revisa el siguiente enlace: http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/bb72fae4-0709-48f2-8f85-31d0b6a85f68

Si intenta escribir consultas "no triviales", ObjectQuery.ToTraceString() es su mejor amigo para asegurarse de que EF no hace algo realmente estúpido a tus espaldas.

2

¿Por qué no hacer simplemente una consulta SQL ordinaria con SqlDataReader y vincularlos a una lista genérica. Parece que SQL es mucho más flexible y poderoso que cualquier ORM. En la práctica de todos modos !! ¿SQL está muerto? Y ese debe ser el enfoque más rápido, y la desventaja son las cadenas sql, pero usted está trabajando más cerca del metal y siente que tiene mucho más control que con cualquier ORM. Se siente como ORM: s siempre tiene algún error y hace que las consultas más complejas sean un dolor en el culo y lleva mucho más tiempo escribir que si las hiciera en SQL simple. ¿O soy solo yo que soy algo nuevo en ORM: s?

+1

"la desventaja es sql strings" ... ¡es por eso que usaría un procedimiento almacenado en lugar de generar esas cadenas! – ObiWanKenobi

+0

SQL no está muerto y cuando se escribe correctamente puede realizar tareas muy complejas extremadamente rápido. Pero SQL es un lenguaje de acceso a bases de datos de bajo nivel. Es casi similar a las instrucciones de ensamblaje de la CPU. Tiene variaciones específicas del proveedor para mejorar el rendimiento que necesita un profundo conocimiento de las funciones internas para lograr, y no tiene ningún concepto de conceptos de nivel superior, como la herencia. Pero los programadores modernos están escribiendo sus programas en lenguajes de alto nivel como C#. ¿Por qué debería tener que bajar a usar el conjunto de instrucciones de bajo nivel? Acceda a ella como objetos tal como lo hace con cualquier otra cosa. –

+0

Pero no me malinterpreten, me encanta SQL. Es un lenguaje interesante para resolver problemas y puede hacer cosas con datos que simplemente no puede hacer en cualquier otro idioma. –