Spring .Net Nhibernate Управление сессиями для консольного приложения

Я понимаю, что Spring может управлять вашими сессиями за вас, если настроен так:

<object name="SessionFactory"
                    type="MyApp.DAL.DAOs.SessionFactoryObject, Leverate.Crm.CrmService.DAL">
<!--My class which inherits from LocalSessionFactoryObject and defines the mapping assemblies to be used--> 

    <property name="ExposeTransactionAwareSessionFactory" value="true" />
    <property name="DbProvider" ref="DbProvider"/>
    <property name="HibernateProperties">
      <dictionary>
        <entry key="cache.use_second_level_cache" value="false"/>
        <entry key="command_timeout" value="180"/>
        <entry key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
        <entry key="dialect" value="NHibernate.Dialect.MsSql2005Dialect"/>
        <entry key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>

      </dictionary>
    </property>
    <property name="SchemaUpdate" value="false"/>
  </object>

    <db:provider id="DbProvider"
                   provider="SqlServer-1.1"
                   connectionString="Data Source=local;Initial Catalog=northwind;Trusted_Connection=Yes;"/>

проблема в том, что с помощью SessionFactory.GetCurrentSession() бросает 'No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here' исключение.

Я видел несколько ответов о том, что в веб-контексте вы должны использовать openSessionInView (или некоторые такие) httpModule. Но что вы делаете в консольном приложении (или, в этом отношении, службе Windows)?

1 ответ

Решение

Вы представляете свою фабрику сеансов как фабрику сеансов с учетом транзакций, что подразумевает, что Spring управляет сессиями для всех методов, которые правильно заключены в транзакцию. Чтобы обернуть ваши методы доступа к данным в транзакции с использованием Spring, вы можете использовать декларативный (управляемый атрибутом) или программный подход.

Другие вопросы по тегам