Bueno amigos, resulta que estoy haciendo dos proyectos en este
momento. Para el primero estoy utilizando SQL Server y no he tenido
ningún tipo de problema con la base de datos.

Pero resulta que para el segundo proyecto, por un requerimiento, es
necesario implementarlo en Oracle. Yo suponía que la portabilidad de
NHibernate me iba permitir pasar de SQL Server a Oracle sin mayores
contratiempos, pero al hacerlo he tenido varios problemas, la mayoría
ya resueltos, pero con serias inquietudes sobre el funcionamiento y
comportamiento de NHibernate con diferentes motores de bases de datos.

Lo primero que me pasó fue que tuve un inconveniente tratando de
conectar NHibernate con Oracle, la configuración que utilicé fue la
siguiente:

  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
     <session-factory>
      <property
name="connection.provider">NHibernate.Connection.DriverConnectionProvider</
property>
      <property name="dialect">NHibernate.Dialect.Oracle9Dialect</
property>
      <property
name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</
property>
      <property
name="connection.connection_string">Password=claveacceso;Persist
Security Info=True;User ID=OraUsuario;Data Source=localhost</property>
      <property name="show_sql">true</property>
      <mapping assembly="proyecto_nuevo" />
    </session-factory>
  </hibernate-configuration>

Pero me generaba una excepción en la que me decía que no encontraba la
librería de Oracle, lo cual no podía estar pasando porque yo ya había
agregado la referencia a la librería tanto en el proyecto del
ensamblado como en el sitio web. Buscando por Internet descubrí que
era un error generalizado (no creo que sea asunto de NHibernate) y se
soluciona agregando el siguiente parámetro al archivo web.config en la
sección Runtime->assemblyBinding y quedaría de la siguiente forma:
<runtime>
                <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <qualifyAssembly partialName="Oracle.DataAccess"
fullName="Oracle.DataAccess, Version=2.111.7.20, Culture=neutral,
PublicKeyToken=89b483f429c47342"/>

En ese momento ya la aplicación se estaba conectando a la base de
datos Oracle, pero ahora el problema era que me estaba generando una
excepción de tipo ORA, la cual dice básicamente "La secuencia no
existe". Revisando el tema descubrí que el asunto iba por el lado del
mapeo, específicamente el Id Generator class que yo estaba utilizando,
que curiosamente era "native" (según la documentación, este generador
de Id funciona según el dialecto que uno haya seleccionado), por lo
cual me tocó cambiarlo a "sequence". La sección del archivo de
configuración de mapeo quedó así:

    <id name="Id">
      <generator class="sequence" />
    </id>

Ahora el siguiente problema que tuve fue una excepción ORA, en la cual
me notificaba que la tabla X no existía, lo cual me pareció extraño
porque yo tengo un archivo global.asax, el cual actualiza el esquema
cada vez que inicia la aplicación y me venia funcionando perfectamente
con SQL Server. Básicamente el código que estaba utilizando es el
siguiente:
            Dim configuracion As New Configuration
            configuracion.Configure()
            Dim esquema As New SchemaUpdate(configuracion)
            esquema.Execute(False, True)
Lo utilizo porque me gusta que al hacer una actualización en las
clases del dominio, automáticamente me actualice el esquema en la base
de datos, cosa que me ha funcionado perfectamente en SQL Server 2005.
Para que la aplicación automáticamente me cree el esquema, tuve que
cambiar el SchemaUpdate por SchemaExport, el problema que tengo con
este cambio, es que tengo que retirar esta linea una vez termine la
aplicación, y la idea de utilizar el update es que sea una aplicación
auto mantenible, por decirlo así.

Básicamente estos son los problemas que he tenido hasta el momento,
espero que le sirvan a alguien mas esta experiencia, y de paso espero
que alguien me expliqué el por qué de alguno de estos comportamientos,
por ejemplo el del por que no funciona el generador de Id "Native", o
por qué el SchemaUpdate no tiene el mismo comportamiento que con SQL
Server 2005.

Gracias y pido excusas por lo extenso del mensaje.
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---

Responder a