У меня следующая проблема.
У меня есть родительский класс с коллекцией дочерних объектов.
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;
}
}
Классы отображаются с помощью nhibernate для базы данных, где столбец tblChild.colName имеет уникальный индекс.
// 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 делает это?
Кто-то объяснение и может помочь мне решить эту проблему?