@ASP.NET MVC中服务层的事务性
在使用SpringMVCforJava之后,我已经习惯于在服务层中应用@Transactional行为,这在HibernateDAOS中非常有效。 现在,我在一个基于LINQ到SQL ORM的项目中面临类似的挑战,我看到所有事务都在DAOs中进行(即使用(DC-DC=new-DC(){DC.submitChanges()} 如何从DAO中删除事务逻辑,并将其带到ASP.NET MVC LINQ2SQL项目中的服务层@ASP.NET MVC中服务层的事务性,asp.net,asp.net-mvc,linq,linq-to-sql,asp.net-mvc-2,Asp.net,Asp.net Mvc,Linq,Linq To Sql,Asp.net Mvc 2,在使用SpringMVCforJava之后,我已经习惯于在服务层中应用@Transactional行为,这在HibernateDAOS中非常有效。 现在,我在一个基于LINQ到SQL ORM的项目中面临类似的挑战,我看到所有事务都在DAOs中进行(即使用(DC-DC=new-DC(){DC.submitChanges()} 如何从DAO中删除事务逻辑,并将其带到ASP.NET MVC LINQ2SQL项目中的服务层 谢谢。它工作得非常好,因为Spring MVC注册了Hibernate的会话和会
谢谢。它工作得非常好,因为Spring MVC注册了Hibernate的
会话
和会话工厂
并负责创建和提交事务。您也可以在.NET中完成,但必须自己完成。没有像Spring MVC提供给Java的所有这些工具的现成集成。您需要我需要将DataContext
实例注入服务层,而不是手动创建它
你称之为服务层吗?对我来说,服务层是一个模型。在这种情况下,这些内容主要不在ASP.NET MVC中-有一种方法可以在ASP.NET MVC()中为控制器的操作创建属性,但这不是服务层。如果你想要服务层的自定义事务属性,它主要意味着面向方面的编程(AOP)
您的选择是什么?选择好的支持AOP的IoC容器-例如Windsor Castle、Spring.NET、Unity 2.0或使用PostSharp进行AOP。创建事务性AOP属性的简单方法是在执行带注释的方法之前创建
TransactionScope
,并在带注释的方法之后创建完成
范围但这不是您想要的,因为您仍然需要创建DataContext
实例并调用SubmitChanges
。您需要AOP属性,该属性将创建DataContext
实例并将其存储在某处并执行带注释的方法。该方法将能够加载存储的上下文实例并使用它。一旦该方法完成AOP属性将调用SubmitChanges
。唯一的问题是在何处存储上下文实例以及如何检索它-我相信Spring MVC在内部使用Spring来实现这一点,并提供整个基础架构,但在.NET中,您必须编写它-如果是Web app。您必须将上下文存储在