Entity Framework vs. LINQ como ORM - WarNov Developer Evangelist - Site Home - MSDN Blogs

Entity Framework vs. LINQ como ORM

Entity Framework vs. LINQ como ORM

Rate This
  • Comments 6

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 (http://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).

Leave a Comment
  • Please add 4 and 7 and type the answer here:
  • Post
  • 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.

  • Saludos,

    De hecho SI; LINQ es ambas cosas. Pero tienes razón al suerir que hagamos la distinción entre las dos funcionalidades de LINQ como ORM (por ejemplo LINQ to SQL) y LINQ como lenguaje de consultas integrado. Por esto, ya modifiqué el artículo como tal.

    En cuanto a tu última apreciación, esto ya estaba puesto en el post.

    Muchas gracias por el comentario!

  • 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!

  • @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"

  • 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"...salu2

  • muy buena tu aclaración, justa y precisa. un saludo

Page 1 of 1 (6 items)