2009-06-08 10 views
6

¿Cuáles son sus experiencias con la última versión de NHibernate (2.0.1 GA) con respecto a escenarios desconectados?NHibernate en escenarios desconectados

Un escenario desconectado es donde busco un gráfico de objetos de NHibernate, me desconecto de la sesión (y conexión a la base de datos), realizo algunos cambios en el gráfico del objeto (borrando colecciones, agregando entidades, actualizando entidades) y luego vuelvo a conectar y guardar ....

+0

soy curiosidades, también –

+0

Probablemente debería ser más específico. ¿Qué tipo de experiencias, qué tipo de "escenario desconectado"? –

+0

¿Por qué? Creo que ya publiqué un escenario, no muy específico, pero en general. Cuando pregunto en un escenario muy específico, la cantidad de respuestas podría ser menor teniendo una general. –

Respuesta

4

Hemos intentado esto en una arquitectura cliente-servidor. Ahora nos estamos moviendo a DTO (objetos de transferencia de datos). Esto significa que las entidades separadas ya no se envían directamente al cliente, sino a objetos especializados.

La razón principal para avanzar en esta dirección no es NHibernate, sino la serialización necesaria para enviar entidades al cliente. Si bien puede usar la carga diferida (¡y lo hará!) Mientras está conectado a la sesión, necesita obtener todas las referencias de la base de datos para serializarlo.

Teníamos muchas guías en lugar de referencias y muchas propiedades que se mapean pero no se serializan ... y se convirtió en un dolor. Por lo tanto, es mucho más fácil copiar las cosas que realmente desea serializar a su propia estructura.

Además de eso, trabajar separado podría funcionar bien.

  • Tenga cuidado con la carga diferida, lo que provocará que se generen excepciones al acceder a objetos no cargados en una instancia desconectada.
  • Tenga cuidado con la simultaneidad, la probabilidad de que las entidades hayan cambiado mientras estuvieron separadas es alta.
  • Tenga cuidado si necesita algún tipo de seguridad o incluso si desea que su servidor haga algunos cambios en los datos. Los objetos separados podrían regresar en cualquier estado.
+0

Si mira LLBLGenPro por ejemplo: antes de generar código, puede decidir qué plantilla usará. Uno usará el patrón de registro activo llamado "autoservicio" y el otro usará el adaptador (como ADO.NET DataAdapter). El último es útil cuando se tiene un escenario desconectado (remoto o servicios web). –

+2

@Patrick: Tengo que admitir que no tengo ni idea de lo que estás hablando. –

+0

Con la plantilla de autoservicio LLBLGenPro creará una clase (o más) donde puede obtener y establecer propiedades (estilo POCO) y luego llamar a un método como "Guardar". Este objeto es de autoservicio con respecto a la administración del estado y la carga del árbol de objetos y la creación de SQL. El estilo del adaptador genera una clase liviana con solo propiedades y es serializable; este objeto se puede pasar a otro objeto que está realizando toda la gestión de estado y la creación de SQL, etc. ... –

4

Usted puede echar un vistazo a los métodos de sesión SaveOrUpdateCopy y fusionar.

Aquí está un artículo que le da más detalles: NHibernate feature: SaveOrUpdateCopy & Merge

+0

Parece que la URL ha cambiado. Ahora parece ser http://www.codinginstinct.com/2009/11/nhibernate-feature-saveorupdatecopy.html –

+0

Gracias, he corregido la url. –

Cuestiones relacionadas