2009-11-08 14 views
5

Muchos desarrolladores de productos desean escribir una aplicación .NET que funcione perfectamente con cualquier RDBMS popular, como SQL server, oracle, DB2, MySql. Si utilizamos el bloque de aplicación de datos, se elige dinámicamente el controlador de la base de datos (OracleClient, SQLClient o OleDBClient) según la configuración.Aplicación neutra de base de datos .NET

Sin embargo, todas las bases de datos tienen sus propios sabores de SQL. Existen diferencias sutiles que evitan que una base de código SQL se use universalmente: los nombres de las funciones son diferentes, la forma en que se manejan las fechas es diferente, la forma en que se manejan las columnas de Identidad, etc.

Se podría usar un producto de terceros de Data Direct para escribir código de DB neutral usando secuencias de escape predefinidas.

¿Hay alguna herramienta o producto de Microsoft que resuelva este problema?

Respuesta

12

La Microsoft ADO.NET Entity Framework es una estructura Object-Relational Mapping de Microsoft que está diseñada para permitirle escribir código que es (algo) DB-agnóstico. Todos los principales DBMS tienen soporte para Entity Framework, aunque para muchos (por ejemplo, MySQL, Postgres) tendrá que descargar algo separado de su instalación de .NET Framework.

Nota: Todavía tengo que trabajar en un solo proyecto grande utilizando una herramienta O/RM donde no había al menos un caso en el que tuvimos que pagar en SQL nativo, ya sea para la funcionalidad específica de DB o para razones de rendimiento (necesario para escribir una consulta de una manera particular para obtener un buen plan de consulta). Pero un buen O/RM puede funcionar la mayor parte del tiempo para evitar tener que escribir SQL.

Dicho esto, la versión actual del Entity Framework es bastante limitada en varias dimensiones-- otros marcos O/RM como NHibernate, SubSonic, etc. son mucho más maduros, donde "maduro" significa que admiten un rango más profundo de las características de DBMS sin tener que pagar a SQL nativo, mayor compatibilidad con la comunidad, mejor rendimiento, etc.

Esta es mi forma educada de decir que, para un proyecto relativamente complejo en el mundo real, no creo que la versión actual del Entity Framework es la mejor manera de ir en relación con las otras herramientas O/RM disponibles.

Aparentemente, la próxima .NET 4.0/VS2010 version of the Microsoft Entity Framework ha mejorado mucho, por lo que la declaración anterior puede no ser cierta el próximo año. El nuevo Entity Framework agrega soporte para DDL, por ejemplo, para que pueda crear tablas e índices de una manera independiente de DBMS. Además, .NET 4.0 Entity Framework está aprovechando una característica genial llamada T4 Templates, que es una buena característica para autogenerar código en tiempo de compilación, lo cual es importante para cosas como envolturas O/RM que deben mantenerse sincronizadas con una externa Esquema de base de datos ... y que debería proporcionar un mejor rendimiento (es decir, precompilado) que las herramientas de O/RM que no conocen los tipos de columnas de la base de datos hasta el tiempo de ejecución.

+0

+1 Una respuesta buena y completa. Puede valer la pena notar que actualmente, el EF solo admite RDBMS. Eso fue lo que el OP preguntó, así que no tengo problemas con su respuesta, pero solo quiero señalar que EF no lo ayudará si de repente necesita acceder a los datos a través de un servicio RESTful, o no relacionado fuentes de datos. –

+0

EntityFramework no funciona con Informix (la base de datos de Satanás) –

1

No directamente de Microsoft. Esas herramientas se denominan comúnmente localizadores de objetos relacionales o ORM corto. NHibernate, por ejemplo, es un ORM común y ampliamente utilizado que seguramente se ajustará a sus necesidades. Por supuesto, hay otros productos comerciales como Telerik OpenAccess ORM, DevExpress XPO o RemObjects DataAbstract que le ayudarán a ser independiente de la base de datos.

+0

There * is * ORM directamente de MS: Entity Framework. –

+0

Otro aspecto de los ORM no es solo el SQL "estándar" que uno puede usar, sino también la gran cantidad de código repetitivo que puede guardar (transacción y manejo de LOB, por nombrar solo dos cosas que le vienen a la mente). – davek

2

Como he entendido, está buscando una herramienta para escribir SQL independientes de RDBMS, pero no como un ORM. Este es un problema muy real resuelto por diferentes proveedores de ORM de diferentes maneras. Solo puedo mencionar XtensiveSQL DOM herramienta, que fue desarrollado para su ORM - DataObjects.Net. Es una abstracción sobre SQL que permite escribir consultas usando el modelo DOM completo. En este momento, SQL DOM no se promociona por separado de DataObjects.Net, pero es un producto de código abierto y seguramente se lo puede preguntar a sus autores.Hasta donde sé, se usa con éxito en algunos proyectos de terceros.

Cuestiones relacionadas