经典三层,单元工作模式出错的解决方案

经典的三层架构,使用接口层实现层与层之间的解耦问题

数据库访问层使用 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 .··.

原文地址:https://www.cnblogs.com/wzalex/p/3366631.html