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, вы можете использовать декларативный (управляемый атрибутом) или программный подход.