Это сработало невероятно, потому что Spring MVC зарегистрировал в Hibernate Session
и SessionFactory
и занимался созданием и совершением транзакций.Вы можете сделать это и в .NET, но вы должны сделать это сами.Не существует готовой интеграции всех этих инструментов, которые Spring MVC предоставляет для Java.Обычно вам нужно внедрить DataContext
экземпляр в сервисный уровень вместо того, чтобы создавать его вручную.
Что вы называете сервисным уровнем?Для меня сервисный уровень - это модель.В этом случае материал в основном находится за пределами ASP.NET MVC - существует способ создания атрибута для действия контроллера в ASP.NET MVC ( пользовательские фильтры ), но это не сервисный уровень.Если вам нужен настраиваемый транзакционный атрибут для сервисного уровня, это в основном означает Аспектно-ориентированное программирование (AOP).
Каков ваш выбор?Выберите хороший контейнер IoC, который поддерживает AOP - например, Windsor Castle, Spring.NET, Unity 2.0 или используйте PostSharp для AOP.Самый простой способ создать транзакционный атрибут AOP - это просто создать TransactionScope
перед выполнением аннотированного метода и Complete
область действия после выполнения аннотированного метода.Но это не то, что вы хотите, потому что вам все равно придется создать DataContext
экземпляр и вызвать SubmitChanges
.Вам нужен атрибут AOP, который создаст экземпляр DataContext
, сохранит его где-нибудь и выполнит аннотированный метод.Метод сможет загрузить сохраненный экземпляр контекста и использовать его.Как только метод завершится, атрибут AOP вызовет SubmitChanges
.Единственная проблема заключается в том, где хранить экземпляр контекста и как его получить - я полагаю, что Spring MVC использует Spring для этого внутренне и обеспечивает всю инфраструктуру, но в .NET вам придется написать его - в случае веб-приложения.вам придется хранить контекст в HttpContext.Items
.