zoukankan      html  css  js  c++  java
  • 经典三层,单元工作模式出错的解决方案

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

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

  • 相关阅读:
    springMVC的自定义类型的转换器
    pl/sql
    oracle中的函数
    Oracle基础
    跳台阶算法题
    红黑树
    优先队列
    堆排序
    H5页面,输入框的光标,如果页面上下滑动光标停留在页面上,除了输入框外,松手过了一段时间才跑回输入框里面
    正则:判断为数字,输入的金额整数位不得超过9位,小数位不得超过2位!
  • 原文地址:https://www.cnblogs.com/wzalex/p/3366631.html
Copyright © 2011-2022 走看看