2010-07-15 13 views
10

Ok, estoy haciendo esta pregunta porque estoy totalmente confundido. Solía ​​utilizar el enfoque normal para acceder a las bases de datos desde C# (me refiero al uso de SQLConnection, OracleConnection, SQLCommand, executequery, etc.). Luego escuché acerca de ADO.NET, ORM y he aprendido NHibernate (no es profesional, pero puedo hacerlo).¿Cuál es el método más utilizado para acceder a la base de datos desde C# hoy en día

Recientemente no hay nada particular de NHibernate en particular. La gente a mi alrededor que solía usar NHibernate (y era fan) ahora se está moviendo a otros métodos.

¿Cuál es el método de acceso a la base de datos más utilizado hoy en día? ¿Cómo puedo hacer un seguimiento de esta tendencia cambiante?

+8

¿Qué dijeron las personas a tu alrededor a las que se estaban mudando? –

+0

Y no se olvide de SqlDataSource, ObjectDataSource, LinqDataSource, LINQ to SQL, Entity Framework, ADO.Net Data Services ... – DOK

+0

Muchas cosas ... enfoque normal (dicen que facilita TDD), Linq, Entity framework etc. etc. etc. etc ... –

Respuesta

19

Los métodos más comunes probablemente son los siguientes:

  • LINQ a SQL
  • Marco de la entidad
  • ADO.NET directamente
  • NHibernate
  • Otros O/RM.

Todos ellos todavía están en uso y tienen diferentes ventajas y desventajas. Creo que Microsoft actualmente está tratando de alentar a las personas a usar el Entity Framework.

4

En mi opinión, para el rápido desarrollo de aplicaciones, el uso de una herramienta ORM como LLBLGEN es la mejor solución. Puede acelerar el progreso del desarrollo dramáticamente.

10

Solo hay una forma: ADO.NET para SQL Server. Más particularmente, los objetos de Conexión y Lector allí. Ahora, puede decir que hay cosas como Entity Framework, pero lo suficientemente interesantes son ARRIBA de la capa de acceso real, utilizando los dos elementos de acceso nombrados anteriormente. Incluso los DataSets son una capa más alta (los datos se leen a través de un DataReader).

¿Cuál es la base de datos más utilizada método de acceso hoy en día?

Apuesto a que STILL es datasets. La cantidad de personas sin educación que siguen el principio de arrastrar y soltar es en mi humilde opinión la mayoría, y este enfoque en el estudio visual conduce a conjuntos de datos.

Los profesionales utilizan un tipo de ORM. Entity Framework está bastante empujado ahora por personas que en su mayoría no saben realmente qué puede hacer un ORM programado correctamente. En este momento, mi mejor opción sigue siendo NHibernate para una capa de alta calidad.

+4

No es una mala respuesta, salvo el último párrafo. Entity Framework es utilizado por aquellos de nosotros que nos damos cuenta de que hay diferentes tipos de ORM, cada uno con fortalezas y debilidades únicas ... por lo que elegimos Entity Framework para nuestra aplicación. –

+3

No solo el uso 'sin educación' de arrastrar y soltar, sino que hay una gran cantidad de sistemas existentes escritos usando ADO.NET y conjuntos de datos tipeados y aún se están desarrollando; nadie va a refaccionar un sistema completo solo para usar versiones más nuevas. Tecnología ORM –

+0

@Herbie: el código heredado es una defensa clara, ¿verdad? @Justin - EF nunca fue un ORM decente hasta ahora. No hay ninguna fuerza en comparación con ofertas más maduras. – TomTom

1

Por lo tanto, hay pocas tecnologías para acceder a la base de datos en .NET. Al principio, esto es ADO.NET. Es una tecnología de acceso 'verdadera', porque otras (como NHibernate, LINQ2SQL, Entity Framework (todas son ORM)) usan ADO.NET para conectarse realmente a la base de datos y ejecutar comandos en su contra. Por supuesto, .NET proporciona otras formas de interactuar con la base de datos, por ejemplo, importar parte de la interfaz COM, pero no son naturales.

Además, existen herramientas que lo ayudan a comunicarse con la base de datos. Son las extensiones ADO.NET (como el acceso a los datos de Enterprise Library) y las herramientas le permiten trabajar con objetos (entidades nombradas) que son naturales para el tiempo de ejecución orientado a objetos como .NET, pero cargan y guardan esas entidades de la base de datos. Estas herramientas denominadas ORM (asignador relacional de objetos) y las herramientas modernas son fáciles de usar y agradables.

1

Personalmente me encanta Linq To Sql usando CodeSmith para generar las entidades, más específicamente creo que Plinqo tiene la mayor facilidad de extensibilidad. Le permite separar todos los objetos de la Entidad en archivos separados con una versión editable y una generada. Esto le permite extender su DAL con tantas funciones auxiliares que necesite. tiene un complemento de Visual Studio que le permite regenerar todas sus entidades con un solo clic.

Normalmente uso el primer diseño de la base de datos, entonces realizo mis cambios en la base de datos, voy a regenerar las entidades VS y luego puedo continuar con la codificación.

Independientemente de lo que elija, creo que un factor importante para que un ORM sea capaz de configurarlo para satisfacer sus necesidades, no existe una talla única para todos.

Por cierto, yo no trabajo para CodeSmith, acabo de utilizarlo :)

1

Bueno, si tengo que elegir uno, diría Marco de la entidad que es la forma más genérica, está en desuso LINQ a SLQ en el futuro, NHibernate será cada vez más en el futuro.

¡Pero el mejor consejo es probablemente intentar elegir uno para todo el equipo! incluso si tiene inconvenientes, todos tienen en algún momento u otro.

+0

@Benjamin No hagas eso. – Rawling

1

NHibernate y Entity Framework son excelentes herramientas para abstraer la base de datos (EF Code First es increíble), pero en algunos casos, esto es malo.

He visto muchas aplicaciones que tienen un rendimiento deficiente en la conexión a bases de datos, y NH o EF no permiten controlar consultas o el uso de las funciones más potentes de la base de datos, a menos que seas un experto en ORM (lamentablemente son poco comunes).

Personalmente, prefiero mantener el control en mis manos.

Creé una herramienta, Thunderstruck, que uso en mis proyectos y recientemente puse la fuente en Github.

Cuestiones relacionadas