Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
@ASP.NET MVC中服务层的事务性_Asp.net_Asp.net Mvc_Linq_Linq To Sql_Asp.net Mvc 2 - Fatal编程技术网

@ASP.NET MVC中服务层的事务性

@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的会话和会

在使用SpringMVCforJava之后,我已经习惯于在服务层中应用@Transactional行为,这在HibernateDAOS中非常有效。 现在,我在一个基于LINQ到SQL ORM的项目中面临类似的挑战,我看到所有事务都在DAOs中进行(即使用(DC-DC=new-DC(){DC.submitChanges()}

如何从DAO中删除事务逻辑,并将其带到ASP.NET MVC LINQ2SQL项目中的服务层


谢谢。

它工作得非常好,因为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。您必须将上下文存储在中de>HttpContext.Items

澄清一下……在我的上下文中,服务层提供了一个方法API,该API可能需要触发DAOs delete、delete JOIN等方法序列。服务类是普通对象(即Java中的POJO)。服务层在我的上下文中不是一组控制器,而是控制器使用的业务逻辑的抽象。服务可以选择缓存某些DAO响应,并为重复数据查询提供优化等。我使用StructureMap for IoC。仍然相同的答案是有效的。是否要使用属性/注释?然后检查k如果StructureMap通过拦截/AOP支持此功能。如果您可以不使用属性生存,请在服务层操作中创建上下文并将其传递给DAO。所有DAO完成工作后,提交服务操作中的更改。