Замок ActiveRecord ошибка "Сессия закрыта" - PullRequest
0 голосов
/ 28 августа 2009

Я пытаюсь начать работу с Castle ActiveRecord, но я застрял, пытаясь заставить его работать в приложении ASP.NET (MVC, если это имеет значение).
Фактически я получаю исключение ObjectDisposedException во время запроса со следующим сообщением:

Сессия закрыта!
Имя объекта: «ISession».

Я инициализирую ActiveRecord из файла XML (как показано в начале работы), содержимое которого:


<?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 и который отвечает за выполнение определенных задач обслуживания.

Ответы [ 2 ]

1 голос
/ 29 августа 2009

Используйте SessionScope.

В Request___Start создайте новый SessionScope () и разместите его в Request_End.

0 голосов
/ 11 ноября 2009

В вашем ApplicationStart сделайте что-то вроде:

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