我有一个嵌套对象(带有子对象的对象),我想从与一个数据库中的活动会话关联的存储库中检索它,逐出它,并将其保存在另一个数据库中(不同的会话,不同的连接字符串) ,不同的存储库)。我试过了:
myISession.Evict(myObjectInstance);
我的MappingConfiguration已
Conventions.Add(DefaultCascade.All())
适用于所有类型。
但我仍然得到“NHibernate.HibernateException:非法尝试将集合与两个打开的会话相关联”。如何删除与原始会话的关联?
答案 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);