mapeo - Opción de base de datos(y ORM) para una aplicación.NET de tamaño pequeño-mediano
orm para c# (6)
Tengo un requisito para desarrollar una aplicación basada en .NET cuyos requisitos de datos puedan exceder el límite de 4 gigas de SQL 2005 Express Edition.
Puede haber otros clientes de la misma aplicación (en el futuro) con el requisito de utilizar una plataforma de base de datos específica (como Oracle o SQL Server) debido a la experiencia interna de DBA.
Preguntas
¿Qué RDBMS recomendarían ustedes? Desde su aspecto, las principales opciones son PostGreSQL, MySQL o FireBird. Solo tengo experiencia con MYSQL de estos.
¿Qué herramienta de ORM (si hay alguna) recomendaría usar, idealmente una que se puede intercambiar entre las plataformas de DB con un mínimo esfuerzo? Me gusta el aspecto del marco de trabajo de la entidad, pero no estoy seguro del grado de compatibilidad de plataformas que no sean SQL Server. Si es útil, utilizaremos la versión 3.5 del Framework. Estoy abierto a la idea de usar una herramienta como NHibernate. Por otro lado, si va a ser más fácil, me complace escribir mis propios procedimientos almacenados / código DAL: no habrá tantas tablas (quizás 30-35).
Últimamente he evaluado muchas posibles soluciones ORM para .NET. Yo, si fuera usted, no seguiría la ruta de Entity Framework cuando utilice algo que no sea MS SQL, aparte de los problemas del modelo conceptual de la entidad (debe ser genérico, pero no hay forma de detectar algo así como la secuencia con este modelo) usted depende en gran medida de los desarrolladores de proveedores de controladores de base de datos de terceros, definitivamente para muchas variables en esta ecuación para mí.
NHibernate, por otro lado, permite ser genérico en el código y específico para el dialecto DB seleccionado. P.EJ. puede usar dicho atributo para una propiedad Id:
[Generator( Class = "native")]
//...
public virtual int CustomerId {get; set; }
Ver la opción de generador "Nativo" con SQL Server NH asumirá que es un campo de identidad (autoincrement) y para Oracle asumirá que esta propiedad usa una secuencia con el mismo nombre (puede cambiar el nombre de la secuencia si lo desea).
Además, hace solo unos días, MS abandonó LINQ to SQL entry level ORM por completo. Nunca puede estar seguro de si no harán lo mismo con Entity Framework. No hay tal problema con el código abierto NHibernate.
No puedo proponer ningún DB que no conozca sus necesidades específicas, pero si desea utilizar un software gratuito (que excluye a Oracle) y aún no tiene experiencia con MySql, debe probar Postgres, que es más poderoso que MySql.
De todos modos, con NHibernate puede cambiar el DB más tarde sin mucho dolor.
Aquí está la lista de dialectos de bases de datos compatibles con NHibernate: http://www.hibernate.org/361.html
EDITAR: Habiendo notado que ya conoces a MySQL, ya que no vas a usar DB directamente de todos modos con NHibernate, creo que primero deberías comenzar con MySql y enfocarte en la parte ORM, será más fácil para ti controlar exactamente qué NHibernate está haciendo con la base de datos.
Pero debes saber que NHibernate te permite escribir tus clases de datos primero y generar tu esquema DB automáticamente; si sigues esta ruta (que es una buena idea desde la perspectiva DDD), la capa DB realmente se volverá transparente para ti.
Sugiero usar NHibernate con postgres.
Puedes hacer todas tus pruebas y desarrollo en sqlite para que no necesites tener una instancia de postgres ejecutándose en tu máquina de desarrollo.
Si no está seguro de si desea usar mysql o postgres, le sugiero probarlos a ambos. Postgres es más compatible, pero si te sientes cómodo con mysql (y estás usando un ORM), probablemente deberías usarlo.
Llbgen es muy agradable para su mapeador ORM. Al principio hay bastante curva de aprendizaje, pero una vez que lo dominas es muy bueno. Es compatible con las bases de datos que mencionas aquí, más algunas más.
Usé MyGenerationSoftware con NHibernate para autogenerar las clases / O específicos para una base de datos mySQL. Lo bueno de MyGenerationSoftware es que puede mirar su base de datos y construir sus clases a partir de eso.
MySQL es (en mi opinión), una base de datos de calidad de producción, y muchos sitios comerciales usan mySQL, incluido Slashdot .
Para NHibernate, una vez que lo tiene configurado, puede editar fácilmente el XML para apuntar a una base de datos diferente, y eso es todo lo que necesita para cambiar las bases de datos.
¿Por qué no Firebird? Firebird tiene más funciones que las otras bases de datos gratuitas. Y es compatible con NHibernate y Entity Framework. Y Firebird podría integrarse en su aplicación y el modelo de licencia es menos restrictivo que MySQL.
Es solo mi humilde opinión.
EntityORM - http://entityorm.uuuq.com satisface sus necesidades y no solo.