2009-08-28 133 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