Tengo un objeto principal que tiene una relación de uno a muchos con una IList de objetos secundarios. ¿Cuál es la mejor forma de eliminar los objetos secundarios? No eliminaré al padre. Mi objeto principal contiene una IList de objetos secundarios. Aquí está el mapeo de la relación uno a muchos:
<bag name="Tiers" cascade="all">
<key column="mismatch_id_no" />
<one-to-many class="TGR_BL.PromoTier,TGR_BL"/>
</bag>
Si intento eliminar todos los objetos de la colección usando clear (), luego llamo a SaveOrUpdate (), obtengo esta excepción:
System.Data.SqlClient.SqlException: Cannot insert the value NULL into column
Si trato de eliminar los objetos secundarios individualmente y luego los elimino del padre, obtengo una excepción:
deleted object would be re-saved by cascade
Esta es la primera vez que trato de eliminar objetos secundarios en NHibernate. ¿Qué estoy haciendo mal?
editar: Solo para aclarar: NO estoy tratando de eliminar el objeto principal, solo los objetos secundarios. Tengo la relación establecida como uno a muchos en el padre. ¿También necesito crear una relación de varios a uno en el mapeo de objetos secundarios?
fuente
De acuerdo con la respuesta de Chuck, resolví mi problema agregando Inverse = true en el mapeo del lado principal:
El mensaje tiene muchos mensajes enviados a:
[HasMany(typeof(MessageSentTo), Cascade = ManyRelationCascadeEnum.AllDeleteOrphan, Inverse = true)] public IList<MessageSentTo> MessageSendTos { get { return m_MessageSendTo; } set { m_MessageSendTo = value; } }
Estoy usando Castle ActiveRecord. Gracias Chuck.
fuente
Intente usar merge () en lugar de saveOrUpdate (). Además, asegúrese de que su cascada esté configurada en all-delete-huérfano y que su relación padre-hijo sea invertible (inverso = verdadero en el padre y luego un campo en el hijo que es la identificación del padre con not-null = verdadero) .
fuente
En nuestro ejemplo, tenemos categorías con muchos productos en los que un producto no admite nulos.
Puede solucionar el problema eliminando el producto y eliminándolo de la colección principal antes de la descarga, pero todavía estamos buscando una mejor solución para esto.
Espero que ayude de todos modos
fuente
Cambie el valor del atributo en cascada de "todos" a "todos-eliminar-huérfanos".
fuente
establezca Not-Null = true en su mapeo en la columna que causa el problema. Sin embargo, no estoy seguro de la sintaxis exacta (lo siento).
fuente