2012-10-26 90 views
2

我正在使用單個會話,我的應用程序包含不同的模塊,會話中提取的對象被保留。當我從任何模塊調用Session.Clear刷新會話或實體時。我得到例外「未能延遲初始化 - 沒有會話或會話已關閉」獲取任何其他模塊中的子實體。未能延遲初始化 - 沒有會話或會話被關閉

[LazyInitializationException中]未能初始化懶洋洋角色的集合:Application.Modules.Repository.childRepository,沒有會話或會話關閉

這我是如何創建一個會話工廠和會話:

var createdSessionFactory = Fluently.Configure(configuration) 
              .Mappings(m => m.FluentMappings.AddFromAssemblyOf<DMProgram>()) 
              .ExposeConfiguration(c => c.SetProperty("command_timeout", "500")) 
              .BuildSessionFactory(); 


ISession Session = NHibernateConfiguration.SessionFactory.OpenSession(); 
+3

我們可以看到會話創建代碼嗎? – fluent

+0

爲什麼你認爲'Session.Clear()'會刷新會話或實體?它實際上會清除會話中的所有對象,並會中斷所有延遲加載。 – dotjoe

+0

請讓我知道如果我做錯了Session的創建。 – Deepak

回答

3

案例:當我們從會話中得到一個對象(A)時。該對象有一些集合(B),這是一個懶加載。您關閉或清除會話。現在你正試圖獲得收藏(B)。確定你得到這個錯誤。

原因:因爲會話不知道父對象(A)。

解決方案:您需要保持會話或您可以熱切加載收集(B)。

相關問題