2009-10-07 7 views
6

Empecé a jugar con Linq a SQL el otro día y tenía curiosidad si debería usarlo en los próximos proyectos. Sé que me ahorrará toneladas de tiempo de desarrollo. He visto muchas preguntas similares sobre el tema, pero tengo algunas preguntas más específicas.¿Qué pros y contras hay usando linq a sql versus crear mi propia capa de datos?

  • ¿Hay algún problema con heredar las clases generadas en el archivo .dbml?

  • ¿Los comandos SQL generados son eficientes? Cuando utilicé SQL Server Profiler noté que cuando obtenía una lista de todos los registros usando un linqDataSource para enlazar a una gridView, veía dos consultas en ejecución. El primero fue un

    SELECT COUNT(*) and then a SELECT TOP(PageSizeOfGrid). 
    

    ¿Por qué?

  • ¿Sería mejor utilizar un ObjectDataSource obteniendo todos los registros de un procedimiento almacenado y almacenándolos en caché?

  • Entity Framework? No sé mucho al respecto, pero creo que puede ser demasiado pesado para mis necesidades. La mayoría de mis bases de datos son bastante simples 10-20 tablas que pueden tener muchas relaciones. ¿Vale la pena investigar?

Se agradecen todas las ideas sobre esto. ¡Gracias!

Respuesta

3

¿Hay algo malo con heredar las clases generadas en el archivo .dbml?

No, nada de malo. Y del mismo modo, puede hacer que las clases generadas hereden de sus propias clases base o implementar otras interfaces distintas de las listas para usar.

¿Los comandos SQL generados son eficientes?

Sí, pero como siempre hay que vigilarlo. Si escribe sus consultas de linq lo mismo que las buenas consultas de SQL, el sql generado será muy eficiente. L2S es bastante bueno para optimizar en algunos escenarios, p. elimina todo lo que se puede eliminar en el cliente, etc. Dicho esto, es posible para que genere SQL incorrecto al igual que es posible escribir consultas de SQL sin procesar ineficaces a mano. Click here for an example ...

Cuando he usado Analizador de SQL Server que cuenta cuando me gustaría obtener una lista de todos los registros utilizando un LinqDataSource de obligar a un GridView me gustaría ver dos consultas siendo ejecutados. El primero fue SELECT COUNT (*) y luego SELECCIONAR TOP (PageSizeOfGrid). ¿Por qué?

No, nunca usé el LinqDataSource. Prefiero ir con consultas de linq sin procesar, no soy partidario de los controles/objetos de fuente de datos automatizados. Con suerte, alguien más puede arrojar algo de luz sobre eso.

I estaría mejor usar un ObjectDataSource obtener todos los registros de un procedimiento almacenado y el almacenamiento en caché ellos?

Igual que el anterior ... :)

Entity Framework? No sé mucho sobre al respecto, pero creo que puede ser demasiado pesado para mis necesidades. La mayoría de mis bases de datos son bastante simples 10 - 20 tablas que pueden tener muchas a muchas relaciones . ¿Vale la pena mirar en?

Espere hasta la próxima versión de EF. Será lanzado como parte de .net 4.0. La versión actual de EF no está lista para el horario estelar y por alguna extraña razón Microsoft decidió no parchear los problemas básicos, sino que puso todo su tiempo y energía trabajando en 4.0. Si ese será un competidor digno/reemplazo para L2S aún está por verse. (Solo he probado la versión beta 1, y esa tiene los mismos problemas que EFv1; principalmente problemas con consultas SQL generadas deficientes ... (ex 1ex 2ex 3 etc.)

3

Si está bien poder orientarme solo a SQL Server, me gustaría usar LINQ to SQL, ya que ayuda mucho a producir una capa de datos clara y de mantenimiento. Si el rendimiento es una preocupación, puede usar selectivamente código SQL directo o procedimientos almacenados para recuperar algunas de las entidades.

Acerca de LINQ to Entities, tuve que usarlo solo una vez, en un proyecto en el que tuve que usar ADO.NET Data Services (las clases raw LINQ to SQL generated no implementan IUpdateable y por lo tanto son de solo lectura cuando se utiliza a través de esta tecnología), y no he encontrado ninguna ventaja convincente sobre LINQ to SQL (no digo que no haya tales ventajas, solo que no las encontré para mi proyecto particular, que solo tenía un puñado de tablas de bases de datos como las suyas).

3

No directamente una respuesta a su pregunta. Pero: Yo haría Nunca escribo mi propia biblioteca de acceso a datos desde cero. Es muy lento y es un problema demasiado general que no vale la pena resolver para una sola aplicación.

Existen bastantes alternativas disponibles, y es muy probable que encuentre una solución adecuada para casi cualquier tipo de proyecto.

  • marco NHibernate
  • LINQ to SQL
  • Entidad
  • un buen número de otros ORM

No se puede decir, en general, cuál es la "mejor" opción, pero la escritura tu propia biblioteca es probablemente la peor.

Cuestiones relacionadas