제목에서 말했듯이, 기본적으로 내가하고 싶은 것은 자식의 부모를 변경하는 것입니다. 하지만 이렇게하려고하면 "ObjectDeletedException : 삭제 된 개체가 연쇄 (삭제 된 개체를 연결에서 제거)로 다시 저장됩니다"예외가 발생합니다.NHibernate : 부모 변경 - "삭제 된 객체는 캐스케이드로 다시 저장됩니다"
나는 지금 몇 시간 씩 인터넷 검색을 해왔지만 찾은 해결책 중 아무 것도 나를 위해 일하지 않았다 !!
이
내 클래스가 포함됩니다 :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>
그리고 이것이 내가 다른 부모에게 아이를 reasign하려고 코드의 조각 :
foreach(Child c in Parent1.Children)
{
Parent2.Children.Add(c);
}
그러나 그런 다음 session.Flush()
이 예외를 throw합니다. 그 문제는 자식이 부모를 바꿨 기 때문에, NHibernate가 자식을 제거해야 할 것이기 때문에 그 부모가 바뀌었기 때문이며, 그러나 anothet 부모에게 재 할당되었다. 다시 말하자면, 다시 캐스케이드 때문에, 아이를 구하십시오.
어떤 도움 매우 감사하겠습니다 ... (이전 또는 이후에 내가 다른 부모에 할당)하지만 일을 그 아무도 매핑을 변경, 이전 부모의 컬렉션에서 아이를 제거하려 !! !!
감사합니다.
가능한 해결 방법은 parents1에 parent1 하위의 사본을 추가하려고합니다. 알고 있다면, 이것은 parent2와 연관된 db에 (저장 후) 새로운 레코드를 생성하고 parent1 자식들의 행들을 제거 할 것입니다. 아니면 ParentId를 업데이트하고 싶습니까? – ASh
그래, 그 해결책에 대해 생각했지만 새 아이디를 만들 수는 없어. 아이의 ID는 그대로있어 ... 어쨌든! –
도움이 되셨습니까? http://stackoverflow.com/questions/2763985/how-do-i-change-a-childs-parent-in-nhibernate-when-cascade-is-delete-all-orphan – ASh