2011-03-15 13 views
0

我有一個嵌套對象(帶有子對象的對象),我想從與一個數據庫中的活動會話相關聯的存儲庫中檢索該對象,並將其逐出,並且將它保存在另一個數據庫(不同的會話,不同的連接字符串,不同的存儲庫)我曾嘗試:如何級聯通過流利NHibernate從會話中逐出對象

myISession.Evict(myObjectInstance); 

我MappingConfiguration有

Conventions.Add(DefaultCascade.All()) 

所有類型。

但我仍然得到「NHibernate.HibernateException:非法嘗試關聯一個集合與兩個打開的會話」。我如何刪除與原始會話的關聯?

回答

2

好的,結果是我的對象,在這種情況下,myObjectInstance由來自兩個不同會話的對象組成,我們稱它們爲A和B. myObjectInstance的屬性myProp1來自會話A,而myProp2來自會話B.然後,我將整個myObjectInstance存儲在會話B中。

不幸的是,我試圖從會話A中逐出myObjectInstance,而不是僅從myProp1中逐出。

的解決方案是:

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