uso subconsultas not net con .net linq linq-to-sql linq-to-entities ado

.net - subconsultas - uso de in en linq



Linq 2 SQL o Entidades Linq (11)

Creo que Linq 2 Sql es una excelente elección. Algunos puntos:

  • Es realmente rápido, recuerdo haber leído una publicación de blog en los Tidbits de rendimiento de Rico Mariani durante la versión beta de L2S, donde la midió casi tan rápido como el antiguo ADO.Net, y eso fue durante su versión beta.
  • Puede hacer ambas consultas linq, así como trabajar con procedimientos almacenados y un buen sql anterior, si así lo desea, y aún así obtener los datos para el mapeo de objetos hecho para usted.
  • El hecho de que Stackoverflow use L2S demuestra que puede funcionar en un sitio web a gran escala.
  • Es mucho más ligero que Entity Framework, que es bueno y malo dependiendo de lo que necesite. En general, si sus necesidades no son súper avanzadas, por lo general puede solucionar cualquier problema con bastante rapidez.

Estoy empezando a diseñar una nueva aplicación y lo que me pregunto es si las opiniones de los pueblos sobre Linq2SQL o Linq2Entities son la mejor tecnología para un desarrollo rápido.

También estoy investigando los servicios de datos de ADO.net.


Linq to SQL es un callejón sin salida en estos días porque Microsoft no va a actualizarlo nunca más. Lo usé por un tiempo para mis propios proyectos, pero encontré que tenía poco poder en comparación con SQL real. Por supuesto, puede parecer más fácil ejecutarlo en el corto plazo, pero a lo largo del ciclo de desarrollo de su aplicación descubrirá que disfruta más del poder de SQL.

Creo que LINQ TO SQL solo debe ser adoptado por aquellos que dependen severamente de las capas de abstracción del framework y no tienen el tiempo / energía / deseo de seguir SQL.

Una cosa más que debes recordar es que la capa adicional entre SQL y tu aplicación tiene su propio costo. La diferencia de velocidad no es algo que notará fácilmente, pero está ahí.

Personalmente, recomiendo que alguien que está empezando se gradúe directamente en SQL y que le falte LINQ to SQL.


Mi voto va a Linq-to-SQL. Se adapta a su escenario de desarrollo rápido; fácil de comenzar, fácil de usar. Además, genera consultas SQL buenas / eficientes a partir de expresiones Linq.

Linq-to-Entities es torpe, si tratas de usar cualquiera de las características ''avanzadas'' que se supone que lo separan de L2S, entonces tendrás que comenzar a editar tu modelo de archivo EDMX usando un editor XML (pronto ejecutarás en ''limitaciones'' en el diseñador donde la única solución / solución recomendada por Microsoft es usar un editor XML para mover manualmente el EDMX). Además de eso, tiende a generar consultas SQL realmente pobres / ineficientes.

Microsoft dice que la próxima versión de Entity Framework será mucho mejor y admitirá todas las ventajas de L2S. Sin embargo, la próxima versión no se lanzará pronto, así que hasta entonces L2S es tu mejor opción.


Nadie puede decir Tu defensitly que es mejor.

Ambos técnicos tienen problemas (NHibernate también tiene problemas).

Estoy usando Linq-to-SQL y estoy feliz con él. Para mi opinión, los problemas en Linq-to-SQL son menores que en EF ^ _ ^.


Recomiendo buscar soluciones que no sean de Microsoft para ORM. nHibernate es una gran solución que tiene todas las ventajas de ambos frameworks y más. Sí, es una curva de aprendizaje más pronunciada, pero con fluidez nHibernate ayuda con eso. Vale la pena el esfuerzo.


Soy un gran admirador de LINQ to SQL si cumple con los siguientes requisitos de diseño:

  • MS SQL Server como el motor de DB
  • Desarrollo RAD
  • 1 - 1 mapeo de clase es todo lo que se requiere

No he trabajado mucho con Entity Framework, pero por lo que sé y lo que he hecho es que no tiene un rendimiento tan bueno cuando se genera desde la misma base de datos que usa LINQ to SQL.

El menor rendimiento se debe a la naturaleza de Entity Framework, utiliza ADO en lugar de proveedores específicos para el servidor de base de datos que está utilizando.


Diría que para un esquema de base de datos simple a moderado, Linq2SQL funciona muy bien y es más fácil de configurar y usar. Esto es lo que uso para mi ORM con algunos pequeños ajustes a través de clases parciales para soportar validación y autorización / auditoría. Uso el diseñador de DBML y agrego mis tablas / relaciones. Cambio el DataContext para hacerlo abstracto y construir una implementación concreta que me permita proporcionar implementaciones de mis funciones con valores de tabla / procedimientos almacenados (que se mapean en el contexto de datos como métodos) que proporcionan ganchos para auditar y autorizar. Implemento métodos parciales en las clases de entidad para OnValidate y OnLoad para hacer tanto la validación como la autorización en el nivel de la tabla. Encuentro que esto es prácticamente todo lo que necesito. Últimamente, he estado definiendo una interfaz y envoltorio para el contexto concreto de datos, así como para permitirme simularlo en mis pruebas unitarias.



Pensamos que L2S era genial hasta que intentamos hacer actualizaciones. Entonces fue patético. Mi colega estaba haciendo la mayor parte de este trabajo mientras yo hacía otras cosas. Habló sobre EF y las formas en que la excesiva capacidad de configuración lo hacía complicado de usar.

Sugerí que dado que apostamos a MSSQL y eso no va a cambiar, él podría piratear todo el material de abstracción de proveedores de bases de datos. Algún tiempo después, me dijo que era una buena sugerencia y que su código era mucho más simple y menos complicado de mantener.

Tengo curiosidad sobre la base sobre la cual esta respuesta ha sido rechazada . Describe la experiencia real y analiza una estrategia alternativa y el éxito relativo de ese enfoque. La votación a la baja es para respuestas que son engañosas, objetivamente incorrectas o simplemente trolling.

Da la casualidad de que he cambiado mi posición en todo el asunto EF vs. L2S, pero eso no cambia el hecho de que votar negativamente algo simplemente porque expresa una opinión diferente a la tuya es infantil y totalmente contrario al espíritu de .


Sí, de acuerdo con Slace.

Solo tenga cuidado con el marco que elija, para asegurarse de que satisfaga todas sus necesidades.

Por ejemplo, hace poco eliminé Entity Framework de un proyecto de trabajo después de trabajar con él de manera bastante sólida en las últimas semanas, ya que no me facilitó las necesidades, principalmente debido a:

  1. Las cosas que no se pueden hacer en Linq a Entidades (como mapear a tipos de en .net enum (grr) y el agravante de recibir ''NotSupportedException'' casi en cada turno si intenta hacerse rico en su enunciado de consulta linq invocando la función o llamadas a métodos (ver enlace)).
  2. La falta de carga diferida nativa (entiendo que hay herramientas como EF Lazy LoadGen para facilitar esto, pero no era algo que quisiera incluir).

Aparte de eso, los comandos y el marco parecían sencillos y claros, y la razón por la que fui con EF fue:

  1. Creía que EF estaba destinado más al desarrollo empresarial y pensaba que L2S era más para aficionados y era un marco limitado. Sin embargo, con mayor comprensión y personalmente, sin necesitar nada en EF que no pude hacer con L2S, estoy contento con L2S. Especialmente si se adapta al , la escalabilidad y la eficiencia están cubiertas para mí.
  2. Opción para múltiples DBMS ''(aún estoy por ver esto en acción)
  3. Se rumoreaba que Microsoft estaba retirando soporte e inversión en Linq a SQL .
  4. Me encanta el hecho de que puede actualizar tablas y cambios de DB dentro de EF .edmx sin tener que eliminar el modelo de esquema existente (que está obligado a hacer en Linq a SQL). Sin embargo, no es muy molesto a menos que haya personalizado cualquier propiedad en su esquema L2S (.dbml).

Lectura adicional (otra publicación SO):
¿Está LINQ to SQL Dead or Alive?

Me encantaría elegir EF, realmente no sé qué hacer con el desembarco L2S vs. EF, y si realmente L2S es un pato muerto, encoja de hombros. Mi principal queja, sin duda, con EF es la excepción NotSupportedException: podría evitar la carga lenta si pudiera realizar llamadas a métodos en linq sin obtener esto ...


Para usar con los servicios de datos ADO.NET (que mencionas), Entity Framework es el que funciona de la caja. Si desea actualizar los datos con LINQ-to-SQL (a través de los servicios de datos ADO.NET), debe realizar algún trabajo para implementar IUpdatable . Afortunadamente, he estado blogueando sobre eso esta semana .

Mis pensamientos generales entre los dos están cubiertos aquí , pero me he suavizado un poco desde entonces, mira aquí .

Básicamente, en este momento prefiero LINQ-a-SQL, pero espero que EF sea más útil en la próxima versión. Por lo tanto, estoy trabajando para que LINQ-to-SQL funcione con ADO.NET Data Services.