经典三层,单元工作模式出错的解决方案
2013-10-13 14:24
204 查看
经典的三层架构,使用接口层实现层与层之间的解耦问题
数据库访问层使用 EF ,所有的DAL 层实现的方法都不尽兴 SaveChanges() 操作
提取一个Idbsession 接口层,一次性提交所有操作到数据库(也就是所谓的单元工作模式);实现如下图
、
现在我有这么一个业务需求,
需要向 A表数据库写入一条数据,然后更新 B,C 两个表相关的数据;
如果B,C更新成功,提交 A,B,C 三个表的记录
如果B,C 更新失败,则删除A表这条记录
因为我在“单元工作模式”中要求EF 的实例在上下文中唯一,所以当前线程一旦创建了“EF上下文实例”之后,就被“缓存”起来了
当我完成业务2 向B,C表添加数据失败,也就是捕获了那个异常之后,上下文的实例一直处于更新异常状态,
如果再进行SaveChanges操作还是会出现刚才的异常,而且推断,在当前的操作中,这个异常会一直存在;
解决方案:既然当前更新表B,C的操作发生异常,反过来重新删除A表记录的操作就需要一个新的上下文实例来处理,否则不可能完成
那么,我就在产生异常之后,将“缓存”在CallContext中的 EF上下文实例清空,下次就会创建一个新的,
就不会有刚才的异常出现了;
如有不到之处,尽情各位大牛不吝批评指正;
Enjoy Coding & have fun .··.
数据库访问层使用 EF ,所有的DAL 层实现的方法都不尽兴 SaveChanges() 操作
提取一个Idbsession 接口层,一次性提交所有操作到数据库(也就是所谓的单元工作模式);实现如下图
、
现在我有这么一个业务需求,
需要向 A表数据库写入一条数据,然后更新 B,C 两个表相关的数据;
如果B,C更新成功,提交 A,B,C 三个表的记录
如果B,C 更新失败,则删除A表这条记录
因为我在“单元工作模式”中要求EF 的实例在上下文中唯一,所以当前线程一旦创建了“EF上下文实例”之后,就被“缓存”起来了
当我完成业务2 向B,C表添加数据失败,也就是捕获了那个异常之后,上下文的实例一直处于更新异常状态,
如果再进行SaveChanges操作还是会出现刚才的异常,而且推断,在当前的操作中,这个异常会一直存在;
解决方案:既然当前更新表B,C的操作发生异常,反过来重新删除A表记录的操作就需要一个新的上下文实例来处理,否则不可能完成
那么,我就在产生异常之后,将“缓存”在CallContext中的 EF上下文实例清空,下次就会创建一个新的,
就不会有刚才的异常出现了;
如有不到之处,尽情各位大牛不吝批评指正;
Enjoy Coding & have fun .··.
相关文章推荐
- .Net普通三层->工厂模式->线程内唯一+单元工作模式->WebService分布式三层
- .Net普通三层 到 工厂模式->线程内唯一+单元工作模式->WebService分布式三层
- .Net普通三层->工厂模式->线程内唯一+单元工作模式->WebService分布式三层
- DDD:管理“工作单元实例”的两种模式
- C#“必须先将当前线程设置为单个线程单元(STA)模式方可进行OLE调用”异常解决方案
- Unit Of Work(工作单元)模式探索
- vs2010引用DirectX&Direct 3D 混合模式程序集出错解决方案
- 不懂这些高并发分布式架构、分布式系统的数据一致性解决方案,你如何能找到高新互联网工作呢?强势解析eBay BASE模式、去哪儿及蘑菇街分布式架构
- .NET应用架构设计—工作单元模式(摆脱过程式代码的重要思想,代替DDD实现轻量级业务)
- 【.Net设计模式系列】工作单元(Unit Of Work)模式 ( 二 )
- .NET应用架构设计―工作单元模式(摆脱过程式代码的重要思想,逆袭DDD)
- 【EntityFramework系列教程九,翻译】在ASP.NET MVC程序中实现存储与单元工作模式
- Contoso 大学 - 9 - 实现仓储和工作单元模式
- 演练5-8:Contoso大学校园管理系统(实现存储池和工作单元模式)
- .NET应用架构设计—工作单元模式(摆脱过程式代码的重要思想,逆袭DDD)
- WinServer2008R2 + IIS 7.5 + .NET4.0 经典模式 运行WebAPI程序报404错误的解决方案
- 翻译:Contoso 大学 - 9 - 实现仓储和工作单元模式
- .NET应用架构设计—工作单元模式(摆脱过程式代码的重要思想,代替DDD实现轻量级业务)
- 在MVC程序中,使用泛型仓储模式和工作单元实现增删查改
- 关于DDD:管理"工作单元实例"的两种模式的使用方法