经典三层,单元工作模式出错的解决方案
经典的三层架构,使用接口层实现层与层之间的解耦问题
数据库访问层使用 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 .··.