Entity Framework vs. LINQ como ORM
LINQ inició siendo una teconología que servía tanto para consultar objetos en memoria, como para mapear tablas de bases de datos SQL a objetos de memoria. Así que luego de hacer el mapeo, con nuestro mismo lenguaje de programación sin necesidad de escribir comandos SQL a través de LINQ tendríamos la posibilidad de hacer consultas y manipulaciones sobre estas entidades en memoria sin mucho problema.
Visto esto, observamos que con LINQ tenemos dos alcances: Como lenguaje de consultas integrado y como ORM.
LINQ fue primero que EntityFramework; al principio LINQ "quizo" ser el ORM de Microsoft, pero demostró algunas deficiencias en ciertos aspectos como la conexión a distintos repositorios. Luego vino el EntityFramework a mejorar esas cosas en las que LINQ tenía debilidades. Pero OJO! EntityFramework solo se ocupa de las operaciones de un ORM. Y el hecho de que haya aparecido, no significa la desaparición de LINQ, dado que LINQ aparte de tener esas caractarísticas de ORM, es un potente lenguaje de consultas integrado que permite consultar tanto entidades (como las arrojadas por EntityFramework, el mismo LINQ o cualquier otro ORM), como objetos personalizados, XML, ActiveDirectory y en general cualquier estructura de datos .NET en memoria que implementen IQueryable (https://msdn.microsoft.com/en-us/library/bb546158.aspx)
En últimas, yo recomendaría usar EntityFramework para hacer ORM y luego usar LINQ para ejecutar consultas muy sencillamente sobre las entidades generadas por el ORM. (Y sobre cualquier otra colección de datos).
Comments
Anonymous
February 06, 2010
Creo que deberías hacer la distinción entre LINQ (sintaxis) y LINQ To SQL (Un componente de .NET para acceso a datos). En tu nota te refieres a LINQ como si fuera ambas cosas. Entity Framework usa LINQ To Entities y hasta NHibernate ya soporta LINQ To NHibernate.Anonymous
February 07, 2010
The comment has been removedAnonymous
June 17, 2010
en teoría. Linq consulta lo que quieras. linq2sql es para hacer(generar) consultas a bases de datos sqlserver EntityFramework aprovecha linq para hacer un poderoso orm, agregando soporte para acceso a otras fuentes de datos diferentes a linq2sql -ahora que recuerdo. como pronuncias tu linq? -yo a ratos digo link -en la oficina dicen linkiu cual es la correcta!? no quiero caer en el problema común del "sicual" (sql) Un saludo!Anonymous
June 18, 2010
@calderonsteven: Hola Steven.. yo diría que no se puede afirmar que Linq consulta lo que sea... Solo podemos usar Linq para consultar colecciones que implementen IQueryable. Lo que pasa con el entity framework, es que las entidades que crea las agrupa en colecciones que implementan esta interfaz, y por eso podemos usar Linq sobre ellas. Exsiten por ejemplo clases que hacen un wrap sobre el Active Directory, implementando IQueryAble.. enotnces en esos caso podríamos usar Linq sobre ellas. Lo que pasa, es que en el framework .net por ejemplo las Listas gereicas (List<T>) de por sí implementan IQueryable y por eso usamos sobre ellas LINQ y arece que siempre fuera a servir... pero en el momento en que trates de aplicar LINQ a una clase que no implemente IQueryable, no te funcionará. Acerca de Linq2SQL precísamente NO es para hacer consultas a SQL Server... es para hacer ORM sobre SQL server, generando un conjunto de entidades agrupadas en colecciones que implementan IQueryAble las cuales pueden ser consulatadas ahora sí usando LINQ. Este es un motivo muy frecuente de confusión. Luego de un tiempo, apareción EntityFramework a hacer lo mismo que el Linq2Sql; pero una vez mapeadas las entidades, las seguimos consultando también con LINQ. Por otro lado, yo pronuncio "LINK"Anonymous
August 03, 2010
Holas, Bueno Linq no sólo consulta a objetos que implementen la interfaz iQueryable sino que también a las de IEnumerable, y ahora como dicen se estila hacer el ORM con entity framework y luegpo usar Linq to entities para realizar las debidas consultas a las entidades generadas por Entity Framework... yo pronuncio "Linkiu"...salu2Anonymous
February 19, 2012
muy buena tu aclaración, justa y precisa. un saludo