【发布时间】:2015-01-23 16:38:04
【问题描述】:
正如标题所说,基本上我想做的就是改变孩子的父母。但是当我尝试这样做时,我得到了异常“ObjectDeletedException:已删除的对象将被级联重新保存(从关联中删除已删除的对象)”。
我已经在谷歌上搜索了几个小时,但我找到的解决方案都不适合我!!
这些是我参与的课程:
public class Parent: Entity
{
public virtual IList<Child> Children { get; set; }
}
public class Child: Entity
{
public virtual DateTime? CancellationDate { get; set; }
}
实体类是具有 Id 属性的实体。
这是父级的映射(Parents.hbm.xml):
<bag name="Children" cascade="all-delete-orphan" table="Schema.Child" where="CancellationDate is null">
<key column="ParentID"/>
<one-to-many class="Namespace.Child"/>
</bag>
这是我尝试将孩子重新分配给另一个父母的代码:
foreach(Child c in Parent1.Children)
{
Parent2.Children.Add(c);
}
但是,session.Flush() 抛出了上面的异常。
我想问题在于,自从孩子改变了他的父母,由于级联NHibernate将不得不消除孩子,但后来它被重新分配给另一个父母,所以再次因为级联,它必须重新保存孩子。
我已经尝试更改映射,并从前父母的集合中删除子项(在我将其分配给另一个父母之前或之后),但这些都不起作用......
任何帮助将不胜感激!
谢谢!!
【问题讨论】:
-
作为一种可能的解决方案,尝试将 parents1 孩子的 COPIES 添加到 parent2。请注意,这将在与 parent2 关联的 db 中创建(保存后)新记录并删除 parent1 子项的行。或者您只想更新 ParentId?
-
是的,我考虑过那个解决方案,但我无法创建一个新的,孩子的 ID 必须保持不变......还是谢谢!!
标签: c# nhibernate mapping cascade orphan