Позвольте мне сначала описать контекст:
В проекте .NET C # я использую NHibernate, чтобы установить связь между объектами C # и моделью базы данных.Я сопоставил свои объекты с помощью атрибутов сопоставления NHibernate.
Я написал запросы доступа к данным на HQL, все они изолированы в отдельных методах, которые украшены атрибутами для управления транзакциями.Вот как выглядят мои классы доступа к данным:
namespace MyProject.DataAccess
{
public class ClientDao
{
private ISessionFactory sessionFactory;
public ISessionFactory SessionFactory
{
protected get { return sessionFactory; }
set { sessionFactory = value; }
}
protected ISession CurrentSession
{
get { return sessionFactory.GetCurrentSession(); }
}
[Transaction(TransactionPropagation.Required, IsolationLevel.ReadCommitted)]
public IList<Client> GetAll()
{
return CurrentSession.CreateQuery("from Client c").List<Client>();
}
}
}
Я настроил управление сессиями и транзакциями Nhibernate с помощью Spring.Вот конфигурация xml:
<!-- NHibernate Configuration -->
<object id="NHibernateSessionFactory" type="GeSuiPro.Abstract.ExtendedSessionFactoryObject, GeSuiPro.Abstract">
...
<property name="HibernateProperties">
...
</property>
<!-- provides integation with Spring's declarative transaction management features -->
<property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>
<!-- Transaction Management Strategy - local database transactions -->
<object id="transactionManager"
type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate21">
<property name="DbProvider" ref="DbProvider"/>
<property name="SessionFactory" ref="NHibernateSessionFactory"/>
</object>
<tx:attribute-driven transaction-manager="transactionManager"/>
<!-- Exception translation object post processor -->
<object type="Spring.Dao.Attributes.PersistenceExceptionTranslationPostProcessor, Spring.Data"/>
Теперь, когда я пытаюсь получить доступ к сеансу из кода C #, все работает нормально:
IList<Client> list = clientDao.GetAll();
Однако некоторые вызовы "GetAll "методы создаются из кода ASP через объекты ObjectDataSource:
<asp:ObjectDataSource ID="odsClient" runat="server" TypeName="MyProject.DataAccess.ClientDao"
SelectMethod="GetAll" DataObjectTypeName="MyProject.Object.Client" />
При доступе к объекту" CurrentSession "в моем методе GetAll я получаю следующую ошибку:" Сессия Hibernate не связана с потокомконфигурация не позволяет создавать здесь нетранзакционную ».Кажется, что-то отсутствует в моей конфигурации.
Для информации я использую .NET 3.5 Framework с NHibernate 2.1.2.Моя база данных - Oracle 11g.
Буду признателен за любую помощь!