Я схожу с ума здесь пытаются разрешить каскадное обновление/удаление вопрос :-)NHibernate каскад - проблема отдельных лиц
У меня есть родительский объект с коллекцией дочерних объектов. Если я изменяю список дочерних объектов в отдельном родительском объекте, добавляя, удаляя и т. Д. - я не вижу, чтобы обновления были правильно каскадированы в коллекции Child.
Отображение файлов:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Domain"
namespace="Domain">
<class name="Parent" table="Parent" >
<id name="Id">
<generator class="guid.comb" />
</id>
<version name="LastModified"
unsaved-value="0"
column="LastModified"
/>
<property name="Name" type="String" length="250" />
<bag name="ParentChildren" lazy="false" table="Parent_Children" cascade="all-delete-orphan" inverse="true">
<key column="ParentId" on-delete="cascade" />
<one-to-many class="ParentChildren" />
</bag>
</class>
<class name="ParentChildren" table="Parent_Children">
<id name="Id">
<generator class="guid.comb" />
</id>
<version name="LastModified"
unsaved-value="0"
column="LastModified"
/>
<many-to-one
name="Parent"
class="Parent"
column="ParentId"
lazy="false"
not-null="true"
/>
</class>
</hibernate-mapping>
Тест
[Test]
public void Test()
{
Guid id;
int lastModified;
// add a child into 1st session then detach
using(ISession session = Store.Local.Get<ISessionFactory>("SessionFactory").OpenSession())
{
Console.Out.WriteLine("Selecting...");
Parent parent = (Parent) session.Get(typeof (Parent), new Guid("4bef7acb-bdae-4dd0-ba1e-9c7500f29d47"));
id = parent.Id;
lastModified = parent.LastModified + 1; // ensure the detached version used later is equal to the persisted version
Console.Out.WriteLine("Adding Child...");
Child child = (from c in session.Linq<Child>() select c).First();
parent.AddChild(child, 0m);
session.Flush();
session.Dispose(); // not needed i know
}
// attach a parent, then save with no Children
using (ISession session = Store.Local.Get<ISessionFactory>("SessionFactory").OpenSession())
{
Parent parent = new Parent("Test");
parent.Id = id;
parent.LastModified = lastModified;
session.Update(parent);
session.Flush();
}
}
Я полагаю, что тот факт, что продукт был обновлен не иметь детей в своей коллекции - дети будут удалены в таблице Parent_Child. Проблемы, похоже, связаны с присоединением продукта к новой сессии? Поскольку для каскада установлено значение all-delete-orphan, я предполагаю, что изменения в коллекции будут распространены на соответствующие сущности/таблицы? В этом случае удаляет?
Что мне здесь не хватает?
C
Каков тип списка детей в вашем родительском классе? – Beatles1692
Можете ли вы разместить решение проблемы? Просто сказать, что вы разобрали его, не помогает. –
Я столкнулся с подобной проблемой и не смог ее решить. Можете ли вы предоставить подробную информацию о том, как вы решили эту проблему? Пожалуйста! – skrishna