NHibernate 尝试在删除操作中将 ID 更新为 null
NHibernate trying to update ID to null on a delete operation
起初我有这些实体:Persona、Paciente、Alergia、Cita 和 Consulta。
当我尝试删除 Persona 时,问题就来了。我的数据库看起来像这样:
我目前正在与 Persona 和 Paciente 合作。这些是它们的映射 类:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="Odontologia General Admin" namespace="Odontologia_General_Admin.Persistence.Entidades" xmlns="urn:nhibernate-mapping-2.2">
<class name="Persona" table="persona" lazy="true" >
<id name="Cipersona" column="ciPersona" />
<bag name="Cliente" cascade="all-delete-orphan">
<key column="ciCliente"/>
<one-to-many class="Cliente" />
</bag>
<bag name="Paciente" cascade="all-delete-orphan">
<key column="ciPaciente"/>
<one-to-many class="Paciente" />
</bag>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="Odontologia General Admin" namespace="Odontologia_General_Admin.Persistence.Entidades" xmlns="urn:nhibernate-mapping-2.2">
<class name="Paciente" table="paciente" lazy="true" >
<id name="Cipaciente" column="ciPaciente" />
<bag name="CitasPaciente" table="cita" lazy="true" inverse="true" cascade="all-delete-orphan">
<key column="ciPaciente" />
<one-to-many class="Cita"/>
</bag>
<bag name="ConsultasPaciente" table="consulta" lazy="true" inverse="true" cascade="all-delete-orphan">
<key column="ciPaciente" />
<one-to-many class="Consulta" />
</bag>
<bag name="AlergiasPaciente" table="alergia_paciente" lazy="true" cascade="all-delete-orphan" inverse="true" >
<key column="ciPaciente"></key>
<many-to-many column="idAlergia" class="Alergia" />
</bag>
</class>
</hibernate-mapping>
他们的实体:
public class Persona : Entidad {
public Persona() { Paciente = new List<Paciente>();
Cliente = new List<Cliente>();
public virtual int Cipersona { get; set; }
[Browsable(false)]
public virtual IList<Cliente> Cliente { get; set; }
[Browsable(false)]
public virtual IList<Paciente> Paciente { get; set; }
}
public class Paciente : Entidad
{
public Paciente() { CitasPaciente = new List<Cita>();}
public virtual int Cipaciente { get; set; }
public virtual IList<Alergia> AlergiasPaciente { get; set; }
public virtual IList<Cita> CitasPaciente{ get; set; }
public virtual IList<Consulta> ConsultasPaciente { get; set; }
}
当我尝试删除 Persona 并且级联以某种方式尝试更新 paciente 并将其 ID 设置为 null 时出现问题
UPDATE paciente SET ciPaciente = null WHERE ciPaciente = ?p0
并且 SQL 抛出异常,因为该列不能为空。
在包映射中,您需要更新="false"
将 not-null="true"
和 update="false"
添加到 Paciente
集合映射:
<bag name="Paciente" cascade="all-delete-orphan">
<key column="ciPaciente" not-null="true" update="false"/>
<one-to-many class="Paciente" />
</bag>
此外,您可能希望将集合映射为逆向。
起初我有这些实体:Persona、Paciente、Alergia、Cita 和 Consulta。
当我尝试删除 Persona 时,问题就来了。我的数据库看起来像这样:
我目前正在与 Persona 和 Paciente 合作。这些是它们的映射 类:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="Odontologia General Admin" namespace="Odontologia_General_Admin.Persistence.Entidades" xmlns="urn:nhibernate-mapping-2.2">
<class name="Persona" table="persona" lazy="true" >
<id name="Cipersona" column="ciPersona" />
<bag name="Cliente" cascade="all-delete-orphan">
<key column="ciCliente"/>
<one-to-many class="Cliente" />
</bag>
<bag name="Paciente" cascade="all-delete-orphan">
<key column="ciPaciente"/>
<one-to-many class="Paciente" />
</bag>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="Odontologia General Admin" namespace="Odontologia_General_Admin.Persistence.Entidades" xmlns="urn:nhibernate-mapping-2.2">
<class name="Paciente" table="paciente" lazy="true" >
<id name="Cipaciente" column="ciPaciente" />
<bag name="CitasPaciente" table="cita" lazy="true" inverse="true" cascade="all-delete-orphan">
<key column="ciPaciente" />
<one-to-many class="Cita"/>
</bag>
<bag name="ConsultasPaciente" table="consulta" lazy="true" inverse="true" cascade="all-delete-orphan">
<key column="ciPaciente" />
<one-to-many class="Consulta" />
</bag>
<bag name="AlergiasPaciente" table="alergia_paciente" lazy="true" cascade="all-delete-orphan" inverse="true" >
<key column="ciPaciente"></key>
<many-to-many column="idAlergia" class="Alergia" />
</bag>
</class>
</hibernate-mapping>
他们的实体:
public class Persona : Entidad {
public Persona() { Paciente = new List<Paciente>();
Cliente = new List<Cliente>();
public virtual int Cipersona { get; set; }
[Browsable(false)]
public virtual IList<Cliente> Cliente { get; set; }
[Browsable(false)]
public virtual IList<Paciente> Paciente { get; set; }
}
public class Paciente : Entidad
{
public Paciente() { CitasPaciente = new List<Cita>();}
public virtual int Cipaciente { get; set; }
public virtual IList<Alergia> AlergiasPaciente { get; set; }
public virtual IList<Cita> CitasPaciente{ get; set; }
public virtual IList<Consulta> ConsultasPaciente { get; set; }
}
当我尝试删除 Persona 并且级联以某种方式尝试更新 paciente 并将其 ID 设置为 null 时出现问题
UPDATE paciente SET ciPaciente = null WHERE ciPaciente = ?p0
并且 SQL 抛出异常,因为该列不能为空。
在包映射中,您需要更新="false"
将 not-null="true"
和 update="false"
添加到 Paciente
集合映射:
<bag name="Paciente" cascade="all-delete-orphan">
<key column="ciPaciente" not-null="true" update="false"/>
<one-to-many class="Paciente" />
</bag>
此外,您可能希望将集合映射为逆向。