Pregunta

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 de la base de datos.

Por lo que he leído, creo que hay dos formas diferentes de interactuar con las bases de datos:

  • Linq a SQL
  • Linq to DataSet

Ahora el producto en el que debo trabajar 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 Linq to SQL, ¿estoy atascado solo con el servidor SQL?
  2. Creo que puedo usar Linq para DataSet tanto para el servidor SQL como para Oracle. Pero, ¿perderé algo (facilidad de programación, rendimiento, confiabilidad, etc.) si uso Linq to DataSet para el servidor SQL (en comparación con Linq to SQL offcourse)?
¿Fue útil?

Solución

Usted tiene razón sobre el # 1: Linq to Sql solo funcionará contra las bases de datos de SQL Server.

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

En mi proyecto actual, estamos usando Linq para Sql y ha estado bien, pero hemos tenido una serie de problemas que superar. Lo he encontrado un poco demasiado simplista a veces en términos de extensibilidad. Escribí una (mejor) respuesta con respecto a Linq to Sql y Entity Framework aquí .

Con respecto a la pregunta # 2: no estoy seguro de que me gustaría volver a DataSets. En mi humilde opinión son más cosas del pasado, pero pueden ser útiles si tiene un conjunto de herramientas decente con controles específicos (como Infragística). Sin embargo, encuentro que sus gastos generales son demasiado caros para los sistemas transaccionales rápidos. La implementación no tiene la mitad de la funcionalidad de Linq to Sql o Entity Framework.

Otros consejos

Para responder a su primera pregunta: no, hay otras implementaciones de linq suppliers para oracle, por ejemplo:

LinqToOracle

DbLinq

Este último admite más bases de datos, como SqLite.

También puedes ver el Entity Framework ADO.NET .

  1. Sí, es solo SQL Server. Además, Microsoft ha congelado L2S y no lo refinará 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 después de que los datos se hayan recuperado de la base de datos. Linq to SQL usa un IQueriable para construir consultas de SQL dinámicas. En muchos casos, L2S tendrá un mejor desempeño y le evitará que escriba el código DB en absoluto.

Debes mirar 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.

  1. No estás 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 to Oracle http://www.codeplex.com/LinqToOracle . No lo he probado yo mismo.

  2. ¿Cómo obtendrá los datos en el conjunto de datos? ¿Supongo que no va 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, deberá escribir todas las consultas SQL usted mismo para obtener los datos de la base de datos, en lugar de permitir que linq cree las consultas de SQL. Por lo tanto, primero tendrá que consultar la base de datos y luego consultar el conjunto de datos. Me parece un doble trabajo ...

Cuando usas Linq para SQL, estarás estancado con SQL Server, que yo sepa.

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 DataSet (MyDataSet.Entity = new MyDataSet .Entidad ()), que envejece después de un tiempo. Creo que ese es el único sacrificio.

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

Ya que aún puedes definir relaciones entre tablas en conjuntos de datos, puedes usar Linq lo suficientemente bien, por lo que realmente no verás problemas allí.

Supongo que la confiabilidad es tan buena con Linq-to-DataSet como con Linq-to-SQL (nunca tuvo problemas), el rendimiento parecía ser lo suficientemente bueno, pero nunca podría realmente perfilarlo.

Usted no está pegado a SQL Server solamente. Ofrecemos implementaciones de LINQ to SQL para servidores Oracle, MySQL, PostgreSQL y SQLite. Obtenga más información aquí Los conjuntos de datos no son tan convenientes en comparación con la tecnología LINQ to SQL. Echa un vistazo a la opción Entity Framework como una alternativa. Puede escribir varios modelos de almacenamiento con un modelo conceptual y luego usar SQL Server y la base de datos Oracle en paralelo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top