NHibernate: Error de borrado
-
01-10-2019 - |
Pregunta
Modelo: Tengo un modelo en el que una instalación puede contener múltiples "sistemas informáticos".
Base de datos: Las Instalaciones tabla tiene dos columnas Nombre y descripción. Los ComputerSystems tabla tiene tres columsn nombre, descripción y InstallationID.
Asignaciones:
Tengo el siguiente mapeo para la instalación:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="myProgram.Core" namespace="myProgram">
<class name="Installation" table="Installations" lazy="true">
<id name="Id" column="Id" type="int">
<generator class="native" />
</id>
<property name="Name" column="Name" type="string" not-null="true" />
<property name="Description" column="Description" type="string" />
<bag name="ComputerSystems" inverse="true" lazy="true" cascade="all-delete-orphan">
<key column="InstallationId" />
<one-to-many class="ComputerSystem" />
</bag>
</class>
</hibernate-mapping>
Tengo el siguiente mapeo para ComputerSystem:
<?xml version="1.0" encoding="utf-8"?>
<id name="Id" column="ID" type="int">
<generator class="native" />
</id>
<property name="Name" column="Name" type="string" not-null="true" />
<property name="Description" column="Description" type="string" />
<many-to-one name="Installation" column="InstallationID" cascade="save-update" not-null="true" />
Las clases:
La clase de instalación es:
public class Installation
{
public virtual String Description { get; set; }
public virtual String Name { get; set; }
public virtual IList<ComputerSystem> ComputerSystems
{
get
{
if (_computerSystemItems== null)
{
lock (this)
{
if (_computerSystemItems== null)
_computerSystemItems= new List<ComputerSystem>();
}
}
return _computerSystemItems;
}
set
{
_computerSystemItems= value;
}
}
protected IList<ComputerSystem> _computerSystemItems;
public Installation()
{
Description = "";
Name= "";
}
}
La clase ComputerSystem es:
public class ComputerSystem { Nombre de la cadena pública virtual {get; conjunto; } public String virtual DESCRIPCIÓN {get; conjunto; } Virtual Instalación pública {get; conjunto; }
}
El problema es que me da un error al intentar eliminar una instalación que contiene una ComputerSystem. El error es: "objeto eliminado sería re-salvado por cascada (remove elimina objeto de asociaciones)". Alguien puede ayudar ?
Saludos, Seb
Solución
creo que esto es causado por la cascada = "Parada en la actualización" en el archivo de asignación de ComputerSystem. Si no es necesario en cascada en esa dirección (hijo a padre), entonces usted puede ser capaz de eliminarlo.
Como alternativa, se podría intentar borrar la lista ComputerSystems de la instalación objeto antes de eliminar la instalación.