2009-04-27 10 views
6

Acabo de encontrarme con un problema importante con NHibernate. Tengo 2 objetos, cada uno con una colección de cosas. Necesito mover una cosa de la colección del Objeto A a la colección del Objeto B. Recibo un error sobre un objeto eliminado porque, en mi opinión, NHibernate intenta eliminar el objeto de la colección del Objeto A cuando necesita mantenerlo para el Objeto B. Desde el punto de vista DB, solo se trata de actualizar la propiedad "principal" al nuevo objeto (Objeto B). Pero con las colecciones, no estoy muy seguro de qué hacer para ...colecciones de NHibernate y objetos en movimiento

¿Existe un procedimiento bien conocido para mover objetos de una colección a otra en NHibernate?

Gracias de antemano por cualquier ayuda.

Saludos,

Eric.

+0

¿Cómo asignó las colecciones? –

Respuesta

3

Estoy asumiendo que usted está usando en cascada en el mapeo para la clase representada por objetos A y B, es decir, A y B son instancias de alguna clase X, y la asignación de X contiene un atributo en cascada en la colección que contiene el objeto a transferir.

Dada esa suposición, esto puede ayudar.

Si desea poder transferir el objeto de una colección a otra, debe considerar si lo que se está moviendo debe tener una existencia independiente de las dos colecciones.

Si el objeto de transferencia no se guarda por sí mismo, se encontrará con problemas cuando realice la transferencia porque el objeto transferido ya es conocido por la sesión.

Hay dos formas de salir que puedo pensar. Probablemente, el mejor de los dos sea tratar el objeto de transferencia como un objeto independiente que se guarda solo en el archivo db (es decir, no se basa en el mapeo de los objetos con la colección en cascada). Conceptualmente, esto tiene sentido porque si puedes transferirlo de una colección a la otra implica que de alguna manera es independiente de los dos objetos que tienen las colecciones. Significa que podrías terminar con huérfanos.

Si desea seguir utilizando cascade en las asignaciones, deberá eliminar del objeto A en una transacción diferente a la agregada al objeto B. Sospecho que eso no es lo que desea hacer.

+0

Rob, gracias por su respuesta. Terminamos retirando NHibernate solo unos días después y por alguna razón, no recuerdo haber visto notificaciones de respuestas a mi hilo. Gracias de todos modos por tu ayuda. –

0

Ha intentado utilizar la cartografía

cascada = "all-delete-orphan"

Cuestiones relacionadas