2010-04-13 12 views
9

Nuestro cliente desea admitir tanto SQL Server como Oracle en el próximo proyecto. Nuestra experiencia proviene de la plataforma .NET/SQL Server. Contrataremos un desarrollador de Oracle, pero nuestra preocupación es con el código de DataAccess. ¿NHibernate hará que DB Engine sea transparente para nosotros? No lo creo, pero me gustaría saber de los desarrolladores que se han enfrentado a situaciones similares.Recomendaciones para admitir Oracle y SQL Server en la misma aplicación ASP.NET con NHibernate

Sé que esta pregunta es un poco vaga, porque no tengo experiencia en Oracle, por lo que no sé qué problemas encontraremos.

Respuesta

8

Usted puede utilizar fácilmente NHibernate para hacer su aplicación de base de datos agnóstica siguiendo algunas prácticas básicas:

  • del diseño de su modelo de objetos en primer lugar.
  • No utilice ningún código específico de la base de datos. Necesitas a alguien con buena experiencia en C#, no un desarrollador de Oracle. No confíe en cosas como desencadenantes, procedimientos almacenados, etc.
  • Deje que NHibernate genere los esquemas DB al menos inicialmente (puede modificar elementos como los índices más adelante) Escogerá los mejores tipos de datos disponibles para cada DB.
  • Utilice un generador de POID DB-agnóstico (hilo o guid) en lugar de secuencias o identidad.
  • Trate de evitar el uso de SQL. HQL y Linq funcionan bien en el 99% de los casos.
  • Evitar características de NH que no son compatibles con todos los de su DB de destino (por ejemplo, Futuro, multicriterio, etc.)

NHibernate tiene una gran comunidad. Siempre puede hacer sus preguntas en http://groups.google.com/group/nhusers además de publicar aquí.

+1

Soy un gran admirador de NHibernate, pero nunca estará completamente agnóstico de la base de datos, aunque NHibernate hace un gran trabajo para acercarse. Un ejemplo con el que me encontré recientemente fue MultiCriteria/MultiQuery que he utilizado en el pasado con SQL Server, pero no funciona con Oracle. Parece haber progreso en esa área: http: // groups.google.com/group/nhibernate-development/browse_thread/thread/8de79fc67b280f04 –

+0

Tiene razón en que algunas características no son compatibles con todas las bases de datos. Sin embargo, es solo una cuestión de no usar esas características. Editaré mi respuesta para reflejar eso. –

1

Hay tres cosas a tener en cuenta: el objeto ISession, las consultas SQL que se generan y los objetos plain-old-clr que se asignan a las tablas.

NHiberante generará las consultas SQL requeridas en función del dialecto de base de datos elegido. Si configura NHibernate para usar el dialecto del Servidor SQL, generará las sentencias SQL correctas del servidor SQL. Esto se puede configurar fácilmente de forma dinámica en el tiempo de ejecución en función de la configuración.

También necesita configurar su sesión para conectarse al tipo correcto de base de datos. De nuevo, varios métodos de configuración pueden admitir la creación dinámica de ISession en tiempo de ejecución.

Sus objetos de datos reales que están asignados a tablas no deberían tener que cambiar en función de la elección de la base de datos. Uno de los puntos fuertes de NHibernates es la flexibilidad que proporciona al admitir múltiples bases de datos a través de un cambio de configuración (bastante) simple y un poco de pensamiento arquitectónico inicial.

Consulte http://codebetter.com/blogs/karlseguin/archive/2009/03/30/using-nhibernate-with-multiple-databases.aspx para ver algunos ejemplos de cómo puede abstraer la base de datos subyacente de la creación y uso de NHibernate.

+0

Olvidé mencionarlo, aunque supongo que no hace falta decirlo, todo supone que la estructura/esquema de la base de datos real es la misma entre las diferentes plataformas de bases de datos que admitirá su aplicación. –

Cuestiones relacionadas