Я работаю с nHibernate и пытаюсь разобраться в коллекциях сумок. Моя структура данных относительно проста ...
запись:
<class name="Entry">
<id name="id" column="EntryId">
<generator type="guid.comb"/>
</id>
<property name="Name" column="Name"/>
<bag name="Results" table="Results" cascade="all">
<key column="EntryId" />
<one-to-many class="Result"/>
</bag>
</class>
Результат:
<class name="Result">
<id name="id" column="ResultId">
<generator type="guid.comb"/>
</id>
<property name="Score" column="Score" />
<many-to-one name="Entry" class="Entry" cascade="all" />
</class>
То, что я хотел бы сделать, что, похоже, не работает, это следующее:
Entry entry = new Entry();
entry.Name = "Name";
// have tried saving at this point to:
// dbSession.SaveOrUpdate(entry);
Result result = new Result();
result.Score = 100;
entry.Results.Add(result);
dbSession.SaveOrUpdate(entry);
Кажется, создается запись в базе данных, но не запись результата. В моей базе данных у меня EntryId в качестве внешнего ключа в таблице результатов. Точно так же я хотел бы иметь возможность удалить объект результата из коллекции и сохранить его в базе данных. Я думал, что каскадная функция позаботилась об этом, но не уверен, что я сделал неправильно ...
EDIT
Теперь он добавляет объект результата в базу данных, но удаление, похоже, не работает:
Entry entry = Entry.Load(id);
entry.Results.Remove(result);
dbSession.SaveOrUpdate(entry);
Я попытался добавить cascade = "all-delete-orphan", но это, похоже, удаляет как родителей, так и детей. Я просто хочу удалить объект с одной записью из базы данных ??