1
我想要使用NHibernate有一個簡單的一對多關係/層次結構。我想孤兒被自動刪除,但是我目前的嘗試都是由ObjectDeletedException引起的。我想知道如果有人能告訴我我做錯了什麼。NHibernate:簡單刪除孤兒場景不起作用
編輯:
我應該已經指定了我加載根美孚,然後除去孩子的會話之外,導致被孤立的一個或更多的孩子。當我在第二個會話中隨後調用SaveOrUpdate(root)時發生異常。我如何糾正分離和修改的對象與數據庫中持久化的對象之間的子項列表中的差異?
問題示例代碼看起來是這樣的:
Foo foo = new Foo();
Foo child1 = new Foo();
Foo child2 = new Foo();
foo.Children.Add(child1);
child1.Children.Add(child2);
// session #1
session.SaveOrUpdate(foo);
// so far, so good
// outside of any session
foo.Children.Clear();
// session #2
PutFoo(foo); // results in ObjectDeletedException
對象正在持續:
class Foo
{
private IList<Foo> children = new List<Foo> children;
public virtual int Id { get; private set; }
public IList<Foo> Children
{
get { return children; }
set { children = value; }
}
}
的FluentNHibernate映射:
class FooMap : ClassMap<SyncDir>
{
public FooMap()
{
Id(x => x.Id);
base.HasMany(x => x.Children).Cascade.AllDeleteOrphan();
}
}
用於保留一個對象的方法Foo類型:
void PutFoo(Foo foo)
{
using (var session = factory.OpenSession())
using (var transaction = factory.BeginTransaction())
{
session.SaveOrUpdate(foo);
transaction.Commit();
}
}
我添加了Parent和Add()/ Remove()方法,但在刪除子項後,在根節點上調用SaveOrUpdate()時仍然收到異常。我應該提到我加載根,然後在會話外調用Remove()。只有在刪除子項並從第二個會話中調用SaveOrUpdate()時,纔會發生異常。 – anthony 2009-09-25 19:20:42