使用Castle ActiveRecord時,我在懶加載時偶然發現了一個問題。爲什麼NHibernate延遲加載綁定到會話?
下工作(顯然)
using (new SessionScope())
{
User singleUser = User.FindFirst(...)
UserGroup groups = singleUser.Groups; // Lazy-loading groups.
}
因爲我需要(使用攔截器)來修改會話過濾器在一定的背景下,我創建了一個新的SessionScope。
using (new SessionScope())
{
User singleUser;
EnableVariousFiltersInThisThread();
using (new SessionScope())
{
singleUser = User.FindFirst(...);
}
DisableVariousFiltersInThisThread();
UserGroup groups = singleUser.Groups; // Lazy-loading groups.
}
最後一行「singleUser.Groups」拋出LazyInitializationException中:「未能初始化懶洋洋角色的集合:組,沒有會話或會話已關閉」。
但是,所有其他會話操作都能正常工作。因此,「單用戶」似乎與現在處置的SessionScope綁定。爲什麼?而這又如何可以解決呢?
顯然它是NHibernate的工作原理。問題是爲什麼:-)感謝您的替代建議。 – mbp