Pregunta Entity Framework vs LINQ to SQL


Ahora que se lanzó .NET v3.5 SP1 (junto con VS2008 SP1), ahora tenemos acceso a .NET entity framework.

Mi pregunta es esta Al intentar decidir entre utilizar Entity Framework y LINQ to SQL como ORM, ¿cuál es la diferencia?

Según entiendo, el Entity Framework (cuando se usa con LINQ to Entities) es un "hermano mayor" de LINQ to SQL? Si este es el caso, ¿qué ventajas tiene? ¿Qué puede hacer que LINQ to SQL no pueda hacer solo?


750
2017-08-12 11:04


origen


Respuestas:


LINQ to SQL solo admite el mapeo de 1 a 1 de tablas de base de datos, vistas, sprocs y funciones disponibles en Microsoft SQL Server. Es una gran API para utilizar para la construcción de acceso rápido a bases de datos SQL Server relativamente bien diseñadas. LINQ2SQL se lanzó por primera vez con C # 3.0 y .Net Framework 3.5.

LINQ to Entities (ADO.Net Entity Framework) es una API ORM (Object Relational Mapper) que permite una definición amplia de modelos de dominio de objetos y sus relaciones con muchos proveedores de datos ADO.Net diferentes. Como tal, puede mezclar y combinar diferentes proveedores de bases de datos, servidores de aplicaciones o protocolos para diseñar un mash-up agregado de objetos que se construyen a partir de una variedad de tablas, fuentes, servicios, etc. Se lanzó ADO.Net Framework con .Net Framework 3.5 SP1.

Este es un buen artículo introductorio en MSDN: Presentando LINQ a datos relacionales


442
2017-09-21 03:22



Creo que la respuesta rápida y sucia es que

  • LINQ to SQL es la forma rápida y fácil de hacerlo. Esto significa que se pondrá en marcha más rápido y entregará más rápido si está trabajando en algo más pequeño.
  • Entity Framework es la manera más completa y sin restricciones de hacerlo. Esto significa que tomará más tiempo por adelantado, se desarrollará más despacio y tendrá más flexibilidad si está trabajando en algo más grande.

188
2017-08-12 16:00



¿Está LINQ to SQL realmente muerto? por Jonathan Allen para InfoQ.com

Matt Warren describe [LINQ to SQL] como algo que "nunca se suponía que existiera". Esencialmente, se suponía que debía ser un sustituto para ayudarlos a desarrollar LINQ hasta que el ORM real estuviera listo.

...

La escala de Entity Framework hizo que fallara la fecha límite de .NET 3.5 / Visual Studio 2008. Se completó a tiempo para el desafortunadamente llamado ".NET 3.5 Service Pack 1", que era más como un lanzamiento importante que un paquete de servicio.

...

A los desarrolladores no les gusta [ADO.NET Entity Framework] debido a la complejidad.

...

a partir de .NET 4.0, LINQ to Entities será la solución de acceso a datos recomendada para LINQ a escenarios relacionales.


103
2017-11-03 15:53



Hay una serie de diferencias obvias descritas en el artículo @lars publicado, pero la respuesta breve es:

  • L2S está estrechamente vinculado: propiedad del objeto al campo específico de la base de datos o, más correctamente, asignación de objetos a un esquema de base de datos específico
  • L2S solo funcionará con SQL Server (hasta donde yo sé)
  • EF permite asignar una sola clase a múltiples tablas
  • EF manejará las relaciones M-M
  • EF tendrá la capacidad de apuntar a cualquier proveedor de datos ADO.NET

La premisa original era que L2S es para Rapid Development, y EF para más aplicaciones "empresariales" de n-tier, pero que está vendiendo L2S un poco corto.


85
2017-08-12 11:15



LINQ a SQL

  1. Fuente de datos homogénea: SQL Server
  2. Recomendado para proyectos pequeños solo donde la estructura de datos está bien diseñada
  3. El mapeo se puede cambiar sin volver a compilar con SqlMetal.exe
  4. .dbml (Lenguaje de marcado de la base de datos)
  5. Asignación uno a uno entre tablas y clases
  6. Apoyos TPH herencia
  7. No admite tipos complejos
  8. Primer enfoque de almacenamiento
  9. Vista centrada en la base de datos de una base de datos
  10. Creado por el equipo de C #
  11. Mejoras admitidas pero no posteriores

Marco de la entidad

  1. Fuente de datos heterogénea Soporte a muchos proveedores de datos
  2. Recomendado para todos los proyectos nuevos, excepto:
    • pequeños (LINQ to SQL)
    • cuando el origen de datos es un archivo plano (ADO.NET)
  3. El mapeo se puede cambiar sin volver a compilar cuando se configuran los archivos de mapeo y modelo Metadata Artifact Process para copiar en el directorio de salida
  4. .edmx (Modelo de datos de entidad) que contiene:
    • SSDL (lenguaje de definición de esquemas de almacenamiento)
    • CSDL (lenguaje de definición de esquema conceptual)
    • MSL (lenguaje de especificación de mapeo)
  5. Mapeos uno a uno, uno a muchos, muchos a uno entre tablas y clases
  6. Admite heredadera:
    • TPH (tabla por jerarquía)
    • TPT (tabla por tipo)
    • TPC (tabla por clase concreta)
  7. Admite tipos complejos
  8. Enfoque de código, Primer modelo primero, Primer almacenamiento primero
  9. Vista centrada en la aplicación de una base de datos
  10. Creado por el equipo de SQL Server
  11. Futuro de las API de datos de Microsoft

Ver también:


55
2018-04-21 08:26



Mi experiencia con Entity Framework ha sido menos que estelar. En primer lugar, debe heredar de las clases base de EF, así que diga adiós a las POCO. Tu diseño tendrá que estar alrededor del EF. Con LinqtoSQL podría usar mis objetos comerciales existentes. Además, no hay carga diferida, tienes que implementarlo tú mismo. Hay algunas soluciones para usar POCO y carga lenta, pero existen en mi humilde opinión porque EF aún no está listo. Planeo regresar después de 4.0


49
2017-12-08 03:50



Encontré una muy buena respuesta aquí que explica cuándo usar lo que en palabras simples:

La regla básica para saber qué marco utilizar es cómo planear   editando sus datos en su capa de presentación.

  • Linq-To-Sql - utilice este marco si planea editar uno a uno   relación de sus datos en su capa de presentación. Significandote   no planea combinar datos de más de una tabla en cualquier vista   o página

  • Marco de la entidad - usa este marco si planeas   combinando datos de más de una tabla en su vista o página. Para hacer   más claro, los términos anteriores son específicos de los datos que serán   manipulado en su vista o página, no solo mostrado. Esto es   importante para entender

Con Entity Framework puede "fusionar" datos presentados juntos   para presentar a la capa de presentación en una forma editable, y luego   cuando se envíe ese formulario, EF sabrá cómo actualizar TODOS los datos   de las diversas tablas

Probablemente haya razones más precisas para elegir EF sobre L2S, pero   esto probablemente sería el más fácil de entender. L2S no   tener la capacidad de combinar datos para la presentación de la vista.


44
2018-03-23 15:52



Mi impresión es que su base de datos es muy rica o muy mal diseñada si Linq2Sql no se ajusta a sus necesidades. Tengo alrededor de 10 sitios web, tanto mayores como pequeños, que usan Linq2Sql. He buscado Entity Framework muchas veces, pero no puedo encontrar una buena razón para usarlo en Linq2Sql. Dicho esto, trato de usar mis bases de datos como modelo, por lo que ya tengo una asignación de 1 a 1 entre el modelo y la base de datos.

En mi trabajo actual tenemos una base de datos con más de 200 tablas. Una base de datos vieja con muchas soluciones malas, por lo que pude ver el beneficio de Entity Framework sobre Linq2Sql, pero aún así preferiría rediseñar la base de datos ya que la base de datos es el motor de la aplicación y si la base de datos está mal diseñada y lenta, mi aplicación también será lento El uso del marco Entity en dicha base de datos parece una solución rápida para disfrazar el modelo incorrecto, pero nunca podría ocultar el mal rendimiento que se obtiene de dicha base de datos.


34
2017-11-21 19:52