型号:我有一个模型,其中一个安装可以包含多个“计算机系统” .
数据库:表安装有两列名称和描述 . 表ComputerSystems有三个columsn Name,Description和InstallationId .
映射:
我有以下安装映射:
<?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>
我为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" />
类别:
安装类是:
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= "";
}
}
ComputerSystem类是:
public class ComputerSystem {public virtual String Name {get;组; } public virtual String Description {get;组;公共虚拟安装安装{get;组; }
}
问题是我在尝试删除包含ComputerSystem的安装时遇到错误 . 错误是:“已删除的对象将通过级联重新保存(从关联中删除已删除的对象)” . 有人可以帮忙吗?
此致,Seb
1 回答
我认为这是由ComputerSystem映射文件中的cascade =“save-update”引起的 . 如果您不需要在该方向级联(子级到父级),那么您可以将其删除 .
或者,您可以尝试在删除安装之前清除安装对象的ComputerSystems列表 .