.net linq-to-sql entity-framework .net-4.0

¿Cuál es la diferencia entre Entity Framework y LINQ to SQL de.NET 4.0?



linq-to-sql entity-framework (4)

Estaba revisando la segunda edición de Professional ASP.NET MVC y me di cuenta de que EF reemplazó LINQ to SQL. Estoy familiarizado con LINQ to SQL desde el primer libro, pero no sé nada sobre EF. De todos modos, al leer el código, parece que nada ha cambiado, excepto el nombre. Las mismas antiguas clases de repositorio, mismas funciones antiguas.

Hice una pequeña investigación. Sé que LINQ no se limita a SQL. Además, EF no está limitado a los servidores SQL de la familia Microsoft. En esta pregunta de 2 años, las personas no están contentas con EF, diciendo que es demasiado complicado y todo. Pero ahora estoy leyendo el mismo código bajo el nombre de EF. Solo las clases se generan con el Modelo de entidad ADO.NET inscrito en LINQ to SQL. ¿Alguien puede aclarar el alboroto acerca de las características de EF ya que es el estándar ORM de facto ahora?


Diferencia entre LINQ to SQL y Entity Framework:

LINQ to SQL:

  • Solo funciona con la base de datos SQL Server.
  • Genera un .dbml para mantener la relación
  • No tiene soporte para tipo complejo.
  • No puede generar una base de datos desde el modelo.
  • Permite el mapeo uno a uno entre las clases de entidad y las tablas / vistas relacionales.
  • Le permite consultar datos usando DataContext.
  • Proporciona un enfoque estrechamente acoplado.
  • Se puede usar para el desarrollo rápido de aplicaciones solo con SQL Server.

Marco de la entidad

  • Puede funcionar con varias bases de datos como Oracle, DB2, MYSQL, SQL Server, etc.

  • Genera un archivo .edmx inicialmente. La relación se mantiene usando 3 archivos diferentes .csdl, .msl y .ssdl

  • Tiene soporte para tipo complejo.

  • Puede generar una base de datos a partir del modelo.

  • Permite mapeos uno a uno, uno a muchos y muchos a muchos entre las clases Entity y las tablas / vistas relacionales

  • Le permite consultar datos utilizando EntitySQL, ObjectContext, DbContext.

  • Proporciona un enfoque débilmente acoplado. Dado que su primera aproximación de código le permite usar el patrón de Inyección de Dependencia, lo que hace es acoplar libremente.

  • Se puede usar para el desarrollo rápido de aplicaciones con RDBMS como SQL Server, Oracle, DB2 y MySQL, etc.

Más detalles


EF alcanzó la mayoría de edad con v4.0. Antes de eso, era un poco doloroso de usar, y no lo recomiendo. Ahora mi recomendación es que todos los nuevos códigos LINQ-to- DB usen EF4.

En cuanto a las nuevas características, la parte LINQ es bastante similar a LINQ to SQL. Pero es una arquitectura bastante diferente: EF4 actúa como un proveedor LINQ para un proveedor (EF) ADO.NET que luego envuelve a otro proveedor ADO.NET. Así que hay cosas nuevas como Entity SQL (que no uso) y EF que soporta diferentes proveedores subyacentes de ADO.NET (que sí uso).

El sistema de modelado XML que usa EF permite también abstracciones de mapeo más potentes . Uno que uso regularmente es tener diferentes tablas con el mismo mapeo de claves primarias a una relación de herencia de entidad; por lo que entiendo, la única forma de hacer esto en LINQ to SQL es a través de una "columna de selector" (aunque nunca intenté esto en LINQ to SQL).


La última EF es mucho más robusta, y no te fuerzan a una experiencia pseudo-ORM impulsada por el diseñador (o un cúmulo de config si intentas hacerlo sin el diseñador). Su modelo puede ser objetos POCO ahora en lugar de algunos bg destrozados de clase parcial impulsados ​​por diseñadores que están intrínsecamente acoplados con códigos diseñados por diseñadores, puede alejarse completamente del diseñador sin sentir que está nadando río arriba, y en general se siente como si tuvieran escuchó a la comunidad o realmente trató de emular las soluciones existentes, probadas en batalla en lugar de hacer una versión para los "Morts" o lo que se suponía que debía ser L2Sql.


Son algo similares, y se pueden usar de una manera muy similar, en cuanto al código, pero tienen algunas diferencias importantes. Tenga en cuenta que "LINQ" no es lo mismo que "LINQ to SQL"; EF también usa LINQ. Algunas diferencias notables son:

  • LINQ to SQL es principalmente solo SQL Server, no tanto por diseño como por implementación. El EF está diseñado para admitir y admite varios DB, si tiene un proveedor ADO.NET compatible.
  • Fuera de la caja, LINQ to SQL tiene una historia muy pobre para los cambios de metadatos de BD. Debe regenerar partes de su modelo desde cero y perderá personalizaciones.
  • El EF es compatible con las características del modelo, como las relaciones entre muchos y la herencia. LINQ to SQL no los admite directamente.
  • En .NET 3.5, LINQ to SQL tenía un soporte mucho mejor para la funcionalidad específica de SQL Server que el EF. Esto no es cierto en .NET 4; son bastante similares en ese sentido.
  • El EF le permite elegir Model First, DB First o Code First modeling. LINQ to SQL, de fábrica, realmente solo es compatible con DB First.