В настоящее время я использую NHibernate с Spring.Net и использую модуль Spring Session In View. Насколько я могу судить, этот модуль только открывает сеанс в BeginRequest и закрывает его в EndRequest. На самом деле он не фиксирует и не сбрасывает сеанс в EndRequest.
Я знаю, что вы можете использовать атрибут Spring [Transaction] для украшения отдельных методов обслуживания, которые будут выполнять фиксацию в конце метода, но я не хочу использовать эту технику.
Есть ли способ настроить модуль OSIV Spring, чтобы он сбрасывал сеанс в EndRequest? Если нет, то есть ли простой способ реализовать мой Open Session In View, который бы этого достиг?
Я попытался реализовать пример "сеанс на веб-запрос" из поваренной книги NH 3, но выдает ошибку CurrentSessionContext:
protected void Application_BeginRequest(object sender, EventArgs e)
{
var sessionFactory = (ISessionFactory) ContextRegistry.GetContext().GetObject("MySessionFactory");
var session = sessionFactory.OpenSession();
CurrentSessionContext.Bind(session);
}
protected void Application_EndRequest(object sender, EventArgs e)
{
var sessionFactory = (ISessionFactory)ContextRegistry.GetContext().GetObject("MySessionFactory");
var session = CurrentSessionContext.Unbind(sessionFactory);
session.Dispose();
}
Примечание. Приведенный выше код пытается скопировать только то, что в данный момент делает Spring.Net. Я планировал обновить это, чтобы очистить сессию после того, как я начал работать.
Я предполагаю, что приведенный выше код не работает, потому что я использую Spring.Net для настройки NH и его SessionFactory, что может сделать недействительным пример в книге.
Любая помощь / совет будет принята с благодарностью.
Я использую NHibernate 3.2 и Spring 1.3.2
Edit:
После прочтения http://forum.springsource.org/archive/index.php/t-16949.html я начинаю задаваться вопросом, является ли транзакция для запроса хорошей идеей.