次の問題があります。
子オブジェクトのコレクションを持つ親クラスがあります。
public class Parent{
int _id;
IList<Child> _childs = new List<Child>();
public IList<Child> Childs {get;}
}
public class Child{
int _id;
string _name;
Parent _parent;
protected Child(){}
public Child(Parent parent, string name){
_parent = parent;
_name = name;
}
}
クラスは、列tblChild.colNameが一意のインデックスを持つデータベースのnhibernateでマップされます。
// Parent
<bag name="_childs" access="field" cascade="all-delete-orphan" inverse="true">
<key column="ParentId" />
<one-to-many class="Parent" />
</bag>
// Child
<many-to-one name="_parent" column="ParentId" cascade="none" access="field">
私の問題:次のコードは、一意のインデックスのために例外をスローします:
Parent parent = new Parent();
Child child1 = new Child(parent, "Child1");
Child child2 = new Child(parent, "Child2");
Child child3 = new Child(parent, "Child3");
parent.Childs.Add(child1);
parent.Childs.Add(child2);
parent.Childs.Add(child3);
parentDao.Save(parent);
parentDao.FlushAndClear();
Child child4 = new Child(parent, "Child1"); // Duplicate Name
parent.Childs.Remove(child1);
parent.Childs.Add(child4);
parentDao.Save(parent);
parentDao.FlushAndClear();
例外の理由は、NHibernateが最初にchild4を挿入し、次にchild1を削除するためです。なぜNHibernateはそうするのですか?誰かが説明し、私がこの問題を解決するのを手伝ってくれる?