2009-07-20 11 views
11

responsabilidad:? Soy un noobie NHibernate así que espero que esta pregunta tiene sentido tengo una relación de muchos a muchos entre dos clases de algo así como ...NHibernate Cascade = guardar-actualización "

public class Entity1 
{ 
    public virtual Guid EntityId { get; set; } 
    public virtual IList<Entity2> Entity2List; 
} 

Public class Entity2 
{ 
    public virtual Guid EntityId { get; set; } 
    public virtual IList<Entity1> Entity1List; 
} 

tengo. agregué una relación de muchos a muchos con una bolsa en ambas asignaciones de clases, definiendo una tabla de asociación pero no estoy seguro de qué opción de cascada usar. Deseo poder crear una nueva instancia de Entity1, agregar una nueva instancia de Entity2 a su lista , llame a Save, y ambos se insertan en la base de datos (y viceversa). Cuando elimine una entidad, debería eliminar cualquier asociación con entidades secundarias, pero no la entidad hija en sí. ¿Debo usar cascade = "save-update"?

Respuesta

25

Sí. Suena como 'guardar-actualizar' es lo que quieres, en este caso.

Nunca encontré una gran explicación de cada opción de cascada en la documentación, pero he utilizado este blog post por Ayende como referencia.

  • ninguno - No realice ninguna cascadas, dejar que los usuarios los mangos por sí mismos.
  • save-update - cuando se guarda/actualiza el objeto, compruebe las asociaciones y guarde/actualice cualquier objeto que lo requiera (incluyendo guardar/actualizar las asociaciones en el escenario de varios a muchos).
  • delete - cuando se elimine el objeto, elimine todos los objetos de la asociación.
  • delete-huérfano - cuando se elimine el objeto, elimine todos los objetos de la asociación. Además de eso, cuando un objeto se elimina de la asociación y no está asociado con otro objeto (huérfano), también elimínelo.
  • todo - cuando un objeto es guardar/actualizar/eliminar, compruebe las asociaciones y guarde/actualice/elimine todos los objetos encontrados.
  • all-delete-huérfano - cuando un objeto es guardar/actualizar/eliminar, compruebe las asociaciones y guarde/actualice/elimine todos los objetos encontrados. Además de eso, cuando un objeto se elimina de la asociación y no se asocia con otro objeto (huérfano), también lo elimina.
Cuestiones relacionadas