2009-03-06 18 views
9

Soy nuevo en el mundo de Linq y actualmente lo estoy explorando. Estoy pensando en usarlo en mi próximo proyecto que involucra la interacción con la base de datos.¿Linq a SQL o Linq a DataSet?

De lo que he leído, creo que hay 2 diferentes formas de interactuar con bases de datos:

  • LINQ to SQL
  • LINQ to DataSet

Ahora el producto que estoy a trabajar en, no puede confiar en el tipo de base de datos. Por ejemplo, podría implementarse con SQL server/Oracle.

Ahora mis preguntas son:

  1. Si uso de LINQ to SQL, estoy atascado con el servidor SQL solamente?
  2. Creo que puedo usar Linq para DataSet tanto para SQL Server como para Oracle. Pero perderé algo (facilidad de programación, rendimiento, fiabilidad, etc.) si utilizo Linq para DataSet para SQL Server (en comparación con Linq para SQL ofcourse).
+0

y una tercera opción: ADO Entity Framework (en la parte superior de Linq to Entities) – RobS

Respuesta

11

Tiene la razón # 1 - Linq to Sql solo funcionará en las bases de datos de SQL Server.

Me gustaría ir con ADO Entity Framework si desea tener la capacidad de acceder a diferentes fuentes de datos (utilizando diferentes proveedores). Obtiene una flexibilidad similar en cuanto al uso de entidades similares a POCO y es bastante fácil de ampliar para implementaciones más avanzadas/complejas.

En mi proyecto actual, estamos utilizando Linq a Sql y ha estado bien, pero hemos tenido una serie de problemas que superar. A veces me resulta un poco simplista en términos de extensibilidad. Escribí una (mejor) respuesta sobre Linq a Sql y Entity Framework here.

Con respecto a la pregunta n. ° 2: no estoy seguro de que me gustaría volver a los DataSets. En mi humilde opinión, son más una cosa del pasado, pero puede ser útil si tiene un juego de herramientas decente con controles específicos (como Infragistics). Sin embargo, considero que su sobrecarga es demasiado costosa para los sistemas transaccionales rápidos. La implementación no tiene la mitad de la funcionalidad de Linq a Sql o Entity Framework.

3
  1. Sí, solo es SQL Server. Además, Microsoft ha congelado L2S y no lo perfeccionará aún más. Pero es un buen marco, funciona muy bien y es fácil de usar.
  2. Linq to DataSet accede a los conjuntos de datos como enumerables una vez que los datos han sido extraídos del DB. Linq to SQL usa IQueriable para construir consultas SQL dinámicas. En muchos casos, L2S funcionará mucho mejor y le ahorrará escribir el código DB en absoluto.

Debe buscar en Linq a Entidades. Ese es el marco más completo disponible. En este momento, es principalmente para SQL Server, pero tendrá soporte para Oracle, etc. a tiempo.

2
  1. No está atascado solo con el servidor SQL. En teoría, puedes construir un proveedor de linq para cualquier base de datos. Hay un proyecto en codeplex para Linq a Oracle http://www.codeplex.com/LinqToOracle. No lo he probado yo mismo.

  2. ¿Cómo se obtendrán los datos en el conjunto de datos?Supongo que no vas a buscar una tabla completa en un conjunto de datos. Eso sería un serio problema de rendimiento. Si va a utilizar Linq para el conjunto de datos, necesitará escribir todas las consultas SQL usted mismo para obtener los datos de la base de datos, en lugar de dejar que linq cree las consultas SQL. Por lo tanto, primero tendrá que consultar la base de datos y luego consultar el conjunto de datos. Me parece un trabajo doble ...

1

Cuando utilizas Linq para SQL, hasta donde yo sé, estarías bastante atrapado en SQL Server.

Si usa Linq para DataSet, perderá un poco de facilidad de programación: con Linq, puede usar las entidades Linq directamente, mientras que con DataSets, debe seguir usando el nombre del conjunto de datos (MyDataSet.Entity = new MyDataSet.Entity()), que envejece después de un tiempo. Creo que ese es el único sacrificio.

Sin embargo, puede usarlo con p. Ej. Oracle (hizo eso en un proyecto). También es más fácil de arrastrar y soltar con un poco más de control en el DataAdapter (hasta donde yo sé, nunca he tenido que modificar tanto Linq-to-SQL), puede especificar (por ejemplo) qué consultas usar , etc.

Dado que aún puede definir las relaciones entre las tablas en los DataSets, aún puede usar Linq lo suficientemente bien, por lo que no verá problemas allí.

Supongo que la fiabilidad es tan buena con Linq-to-DataSet como con Linq-to-SQL (nunca tuvo problemas), el rendimiento parecía ser lo suficientemente bueno, aunque nunca pudo realmente darle un perfil.

4

para responder a su primera pregunta: no, hay otras implementaciones de proveedores de LINQ para Oracle, por ejemplo:

LinqToOracle

DbLinq

Este último apoyo más bases de datos, como SQLite.

También ingrese al ADO.NET Entity Framework.

1

No está limitado a SQL Server solamente. Ofrecemos implementaciones LINQ to SQL para Oracle, MySQL, PostgreSQL y servidores SQLite. Obtenga más información here Los DataSets no son tan convenientes en comparación con la tecnología LINQ to SQL. Consulte la opción de marco de entidades como alternativa. Puede escribir varios modelos de almacenamiento con un modelo conceptual y luego usar SQL Server y la base de datos Oracle en paralelo.