如何级联通过Fluent NHibernate从会话中逐出对象

时间:2011-03-15 11:35:43

标签: nhibernate fluent-nhibernate

我有一个嵌套对象(带有子对象的对象),我想从与一个数据库中的活动会话关联的存储库中检索它,逐出它,并将其保存在另一个数据库中(不同的会话,不同的连接字符串) ,不同的存储库)。我试过了:

myISession.Evict(myObjectInstance);

我的MappingConfiguration已

Conventions.Add(DefaultCascade.All())

适用于所有类型。

但我仍然得到“NHibernate.HibernateException:非法尝试将集合与两个打开的会话相关联”。如何删除与原始会话的关联?

1 个答案:

答案 0 :(得分:2)

好吧,事实证明我的对象,在这种情况下,myObjectInstance由来自两个不同会话的对象组成,让我们称它们为A和B. myObjectInstance具有来自会话A的属性myProp1和来自会话B的myProp2。我当时是存储会话B中的整个myObjectInstance。

不幸的是,我试图从会话A中驱逐myObjectInstance,而不仅仅是myProp1。

解决方案是:

NHibernateUtil.Initialize(myObjectInstance.myProp1); //eager load object being evicted.
_dataSession.Evict(myObjectInstance.myProp1);
MyObjectRepository.Save(myObjectInstance);