asp.net-mvc – 如何管理服务层中的事务?
我们正在开发一个具有以下架构的.Net应用程序:表示层(使用带有ASP.Net MVC 2的MVC模式),服务层,数据访问层(使用实体框架上的存储库模式).
我们决定将事务管理放在服务层中,但我们不确定如何实现它.我们希望完全在服务层级别控制事务.也就是说,每次控制器调用服务层中的方法时,它都必须是关于数据库更新的原子操作. 如果服务层中提供的不同服务之间没有关系,那么它将很简单:每个方法应该在执行结束时提交更改(即,在它使用的上下文中调用save方法).但有时服务层的服务可以协同工作. 例如:我们提供的货运服务具有接收以下参数的确认方法:货件ID,指示其是否对应于新客户或现有客户的标志,客户ID(如果货件确认是针对现有的客户)和客户名称(如果是新客户).如果该标志设置为“新客户”,则服务层必须(a)创建客户并(b)确认装运.对于(a)货运服务调用客户服务(已经实现了创建新客户并将其存储在数据库中所需的验证和逻辑). 谁应该在这种情况下提交更改? >客户服务部门应该这样做吗?它在创建新客户后无法提交更改,因为稍后在发货确认方法中可能会出现问题,但是在直接调用的情况下它必须提交更改(在其他用例中,提供用于创建客户端). 我们应该遵循这样的设计模式吗? 解决方法
我的服务上有一个Commit(),只有在服务创建UnitOfWork时才提交,如果在构造函数中传递,则提交不执行任何操作.
我为服务使用了第二个(内部)构造函数: public class MyService { private IUnitOfWork _uow; private bool _uowInternal; public MyService() { _uow = new UnitOfWork(); _uowInternal = false; } internal MyService(IUnitOfWork uow) { _uow = uow; _uowInternal = true; } public MyServiceCall() { // Create second service,passing in my UnitOfWork: var svc2 = new MySecondService(_uow); // Do your stuff with both services. .... // Commit my UnitOfWork,which will include all changes from svc2: Commit(); } public void Commit() { if(!_uowInternal) _uow.Commit(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net – 如何检查用户是属于AD组还是嵌套组?
- asp.net-mvc-4 – 调用客户端时应该发出服务器端方法异步?
- asp.net-mvc – MVC3 ModelBinding回收了一个带有索引间隙的
- asp.net-mvc – 可以更改Html.DropDownListFor生成的html名
- asp-classic – 使用经典ASP区分测试和生产的最佳方式
- asp.net-mvc – 使用Razor的Jquery模板如何在text / html脚
- ASP.net移动应用程序开发
- asp.net回发模型的问题或缺陷
- SignalR在asp.net core下使用
- 在asp.net发送简讯到大约10000封电子邮件
- ASP.NET Core和Angular的RDLC本地报表查看器(> 2
- asp.net – 在会话中存储用户ID
- asp.net-mvc – ASP.NET MVC向最终用户显示操作成
- asp.net – 诊断“请求超时”HttpExceptions
- asp.net-mvc – Url.Action with RouteValueDict
- asp.net – 文件上传控件HasFile始终为false,nam
- asp.net – 如何通过在MasterPage上单击按钮来处
- asp.net-mvc – 具有.NET MVC 5属性路由的贪婪段
- asp.net – 正在生成无效的Webresource.axd参数
- asp.net – 奇数编号单元格未添加到Pdf