Pregunta
¿Qué tipo de consideraciones existen para migrar una aplicación desde NHibernate 1,2 a 2,0?¿Qué son los cambios importantes vs.¿Cambios recomendados?
¿Hay problemas de mapeo?
Solución
Cambios importantes en NHibernate 2.0
Si tiene una buena cobertura de prueba, es un trabajo complicado.
Editar:Actualizamos esta mañana.No hay nada importante.Tienes que Flush() la sesión después de eliminarla.El espacio de nombres Expression pasó a llamarse Criterion.Todo esto está cubierto en el enlace de arriba.Las asignaciones no necesitan cambios.Es bastante transparente.Ah, y transacciones en todos lados, pero probablemente ya lo estabas haciendo.
Por cierto, aquí hay un vistazo interesante a los cambios: http://codebetter.com/blogs/patricksmacchia/archive/2008/08/26/nhibernate-2-0-changes-overview.aspx
Otros consejos
Encontré la respuesta aquí:
versión dorada 2.0.0.GA
CAMBIOS IMPORTANTES de NH1.2.1GA a NH2.0.0
-
Infraestructura
- .NET 1.1 ya no es compatible
- Nullables.NHibernate ya no es compatible (use tipos que aceptan valores NULL de .NET 2.0)
- Contribuir se movió.Nueva ubicacion
-
Tiempo de compilación
- El espacio de nombres NHibernate.Expression pasó a llamarse NHibernate.Criterion
- IInterceptor tiene métodos adicionales.(IsUnsaved pasó a llamarse IsTransient)
- Estrategia de nombre
- Yo tecleo
- IEntityPersister
- Tipo de versión I
- IBatcher
- Tipo de colección de usuarios
- Tipo de usuario mejorado
- IPropertyAccessor
- ValueTypeType renombrado a PrimitiveType
-
Posibles cambios importantes para los marcos externos
- Se movieron varias clases entre espacios de nombres.
- Se han cambiado los nombres de varias clases (para que coincidan con los nombres de Hibernate 3.2)
- La interfaz ISession tiene métodos adicionales
- Proveedor de ICache
- ICriterio
- CriteriosConsultaTraductor
Tiempo de inicialización
- La sección <nhibernate>, en App.config, ya no es compatible y será ignorada.El esquema de configuración para el archivo de configuración y App.config ahora es idéntico y el nombre de la sección App.config es:<configuración-hibernación>
- <hibernate-configuration> tiene un esquema diferente y todos los nombres de propiedades están verificados
- las propiedades de configuración ya no tienen el prefijo “hibernate”. Si antes especificabas “hibernate.dialect”, ahora especificas solo “dialecto”.
- Todas las consultas nombradas se validarán en el momento de la inicialización, se generará una excepción si alguna no es válida (se puede deshabilitar si es necesario)
- Controles más estrictos para las clases de proxy (todos los métodos públicos deben ser virtuales)
tiempo de ejecución
- SaveOrUpdateCopy() devuelve una nueva instancia de la entidad sin cambiar la original
- AutoFlush no ocurrirá fuera de una transacción: las transacciones de la base de datos nunca son opcionales, toda comunicación con la base de datos debe ocurrir dentro de una transacción, independientemente de los datos que lea o escriba.
- NHibernate devolverá consultas largas para recuento (*) en SQL Server
- <fórmula> debe contener paréntesis cuando sea necesario
- Estos nombres de funciones HQL pueden causar conflictos en sus nombres reservados HQL:
- subcadena
- localizar
- recortar
- longitud
- longitud_bit
- juntarse
- nulo
- abdominales
- modificación
- raíz cuadrada
- superior
- más bajo
- elenco
- extracto
- concat
- fecha y hora actual
- fecha del sistema
- segundo
- minuto
- hora
- día
- mes
- año
- cadena
- <cualquier> cuando meta-type=”class” el tipo persistente es una cadena que contiene Class.FullName
- Para establecer un parámetro en una consulta debe usar SetParameter(”paraName”, typeof(YourClass).FullName, NHibernateUtil.ClassMetaType)