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