首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate试图在删除操作中将ID更新为null

NHibernate试图在删除操作中将ID更新为null
EN

Stack Overflow用户
提问于 2015-05-18 02:33:15
回答 2查看 1.2K关注 0票数 1

起初,我有这样的实体:人物角色、Paciente、Alergia、Cita和Consulta。当我试图删除一个角色时,问题就来了。我的DB看起来如下:

我现在只是和人物角色和Paciente一起工作。这些是它们的映射和类:

代码语言:javascript
复制
    <?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>

及其实体:

代码语言:javascript
复制
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; }
}

当我试图删除一个人物角色时,问题就出现了,而级联试图以某种方式更新一个paciente,并将其ID设置为null。

代码语言:javascript
复制
UPDATE paciente SET ciPaciente = null WHERE ciPaciente = ?p0

SQL会抛出异常,因为该列不能为空。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-18 04:32:42

not-null="true"update="false"添加到Paciente集合映射中:

代码语言:javascript
复制
<bag name="Paciente" cascade="all-delete-orphan">
  <key column="ciPaciente" not-null="true" update="false"/>
  <one-to-many class="Paciente" />
</bag>

另外,您可能希望将集合映射为逆集合。

票数 4
EN

Stack Overflow用户

发布于 2015-05-18 04:31:44

在包映射中,您需要update="false“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30294301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档