분리 된 엔티티와 함께 / I가 수집 자식 엔티티와 상위 엔티티가NHibernate에 폭포 - 문제 내가 계단식 업데이트를 해결하기 위해 노력하고 여기에 너트려고하고
:-) 문제를 삭제합니다. 분리 된 상위 개체에서 하위 엔터티 목록을 수정하고 추가, 삭제하는 등의 작업을 수행 할 때 하위 컬렉션에 올바르게 연결된 캐스케이드가 표시되지 않습니다.
매핑 파일 :
<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 테이블 문제는 새로운 세션에 제품을 연결하는 것과 관련이있는 것 같습니다. 캐스케이드가 모두 삭제 - 고아로 설정되었으므로 컬렉션에 대한 변경 사항이 관련 엔티티/테이블에 전파된다고 가정합니다. 이 경우 삭제 하시겠습니까?
무엇이 여기에 있습니까?
c
상위 클래스의 하위 목록 유형은 무엇입니까? – Beatles1692
문제를 해결할 수 있습니까? 간단히 말해서 당신이 그것을 분류했다는 것은 도움이되지 않습니다. –
나는 비슷한 문제에 직면 해 있으며 해결하지 못했습니다. 이 문제를 어떻게 해결했는지에 대해 자세히 설명해 주시겠습니까? 부디! – skrishna