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 .··.

  • 相关阅读:
    String&StringBuffer&StringBuilder区别
    linux启动流程简介
    nginx视频直播/点播服务干货分享
    Http协议的认识
    php中对象是引用类型吗?
    nginx与php-fpm 504 Gateway Time-out 排查与解决案例
    php header函数常见用途
    php魔术方法
    ajax 和jsonp 不是一码事 细读详解
    php session redis 配置
  • 原文地址:https://www.cnblogs.com/wzalex/p/3366631.html
Copyright © 2011-2022 走看看