У меня есть существующий проект веб-форм asp.net, который использует Microsoft Enterprise DAAB для DAL, мне нужно реализовать некоторые расширенные функции, и я хотел бы использовать NHibernate, чтобы упростить задачу.
Существуют ли какие-либо шаблоны проектирования / архитектуры, позволяющие использовать гибридный DAAB / NHibernate DAL? Это хорошая идея ?
Я думаю: если бы у меня был гибридный DAL, я все равно мог бы передавать запросы с высоким трафиком / нединамические запросы через сторону DAAB и сэкономить накладные расходы на динамическую генерацию sql. Но все же есть nhibernate для более сложных запросов.
Кроме того, как лучше всего настроить NHibernate DAL / BLL для приложения веб-форм asp.net? Я прочитал руководство на сайте NHibernate и несколько других, похоже, нет единого мнения о запуске / завершении сеанса nhib. Я просто ищу лучший пример из практики.
Спасибо





Один из подходов, о котором я слышал, - это использование nHibernate, когда вы взаимодействуете с моделью предметной области. Имейте в виду, что nHibernate может вызывать хранимые процедуры, поэтому, если вы хотите избежать генерации SQL, вы можете, но я бы посоветовал этого не делать.
Если у вас есть запросы для отчетов или отображения данных, из которых вы не хотите создавать настраиваемые объекты, вы можете использовать DAAB, хотя я бы не рекомендовал делать это, если вы собираетесь создавать свои объекты.
Что касается наилучшей практики, я обнаружил, что создавая сеанс, когда он вам нужен, а затем сохраняете его в httpContext, вы закрываете сеанс при каждом запросе.
Единственное, что нужно сделать, это создать и завершить транзакцию, которую я бы сделал на вашем уровне обслуживания или уровне приложения, если ваша логика будет охватывать несколько служб (я определяю службу не как веб-службу, а как фрагмент кода высокого уровня, который защищает ваше приложение на уровне домена).
Хорошей отправной точкой является статья Билли Маккафферти здесь: http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx
В его коде есть ошибка / ограничение, ознакомьтесь с моим сообщением в блоге, если вы используете его метод: http://jberke.blogspot.com/2008/10/nhibernate-transaction-session-mgmt.html
У вас есть два вопроса - вы или модератор должны разделить его на два: 1) Как лучше всего использовать DAAB и NHibernate вместе?
2) Как лучше всего настроить NHibernate в приложении веб-форм?
Я могу ответить на второй вопрос: использовать HttpModule в ASP.NET для настройки контекста для каждого запроса. Пример модуля можно найти здесь: http://tinyurl.com/b5am9b
public class NHibernateSessionModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.EndRequest += new System.EventHandler(context_EndRequest);
}
void context_EndRequest(object sender, System.EventArgs e)
{
HybridSessionBuilder builder = new HybridSessionBuilder();
ISession session = builder.GetExistingWebSession();
if (session != null)
{
Log.Debug(this, "Disposing of ISession " + session.GetHashCode());
session.Dispose();
}
}
public void Dispose()
{
}
}