2009-08-28 134 views
0

我試圖開始使用Castle ActiveRecord,但我一直試圖讓它在ASP.NET(MVC,如果它很重要)應用程序中工作。
實際上,我在查詢過程中收到以下消息時發生ObjectDisposedException:Castle ActiveRecord錯誤「會話已關閉」

Session is closed!
對象名稱:'ISession'。

我從一個XML文件初始化的ActiveRecord(如入門所示),其內容是:


<?xml version="1.0" encoding="utf-8" ?> 

<activerecord isWeb="true" isDebug="true" threadinfotype="Castle.ActiveRecord.Framework.Scopes.HybridWebThreadScopeInfo, Castle.ActiveRecord"> 

    <config> 
    <add key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver" /> 
    <add key="dialect" value="NHibernate.Dialect.MsSql2008Dialect" /> 
    <add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider" /> 
    <add key="connection.connection_string" value="Data Source=.\SQLEXPRESS;Initial Catalog=testDB;Integrated Security=SSPI" /> 
    <add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle" /> 
    <add key="show_sql" value="true" /> 
    <add key="default_schema" value="testDB.dbo" /> 
    </config> 

</activerecord> 

遺憾的是大多是由於缺乏文檔和我有關溫莎城堡我完全無知我不知道該如何配置才能使其工作,所以如果你們中的任何人能告訴我什麼是缺失或什麼是錯誤的,我會很感激。

在此先感謝

編輯:我也許應該規定,在我在的Application_Start產卵並負責運行某些維護任務的線程中發生此錯誤。

+1

你有一個NHibernate的HTTP模塊? – 2009-08-28 23:35:03

+0

不,或者如果是這樣,我還沒有意識到它坐在我的/ bin中,我沒有添加任何設置。你能否給我更多關於這個話題的細節?謝謝! – em70 2009-08-29 03:40:54

+1

請參閱http://using.castleproject.org/display/AR/Enable+Session+per+Request – 2009-08-29 14:48:24

回答

1

使用SessionScope。

在Request___Start中,創建一個新的SessionScope()並將其置於Request_End中。

+0

您可以添加更多信息或示例代碼嗎? 謝謝 – em70 2009-08-29 12:32:54

0

在你ApplicationStart做這樣的事情:

void Application_Start(...) { 
    using(SessionScope session = new SessionScope()) { 
     // Your Startup Logic here 
     session.Flush(); 
    } 
} 
+1

不會工作,emaster70說它在另一個線程 – 2009-11-11 15:40:22

+0

如果ActiveRecord的東西是線程特定的,爲什麼不在新的線程上再次運行ActiveRecord.Initialize(...)? – Thomas 2009-11-11 15:54:05

+1

ActiveRecord.Initialize()不是線程特定的,它是應用程序範圍內的 – 2009-11-12 20:36:41