zoukankan      html  css  js  c++  java
  • LINQ-to-SQL那点事~LINQ-to-SQL中的并发冲突与应对

    回到目录

    上一篇文章中提到了并发冲突,还说详细的说明在这讲来说,呵呵,那现在就说一下吧!

    并发冲突产生的原因

    事实上,linq to sql中的并发冲突是指记录在进行update操作时,客户端A1取出的数据{1,zzl,male},客户端A2也取出这条数据{1,zzl,male},这时A1进行对实体重新赋值{1,zzl,female},并进行submit提交,数据库的值被改为{1,zzl,female}

    注意:这时数据库的值{1,zzl,female}与A2所取出的值{1,zzl,male}已经不相同了,这时,在进行update时就会出现并发冲突。

    并发冲突的应对

    在进行submitchange时,由于产生了并发异常,这时.net会抛出System.Data.Linq.ChangeConflictException异常,我们可以把它进行捕捉,然后根据我们的要求,去重新进行数据上下文的提交,事实上,代码部分已经在上一篇文章中给出,这里,再写一遍

    public void SaveChanges()
            {
                ChangeSet cSet = _db.GetChangeSet();
                if ((cSet.Inserts.Count > 0
                    || cSet.Updates.Count > 0
                    || cSet.Deletes.Count > 0)
                    && !UnitOfWork.IsNotSubmit)
                {
                    try
                    {
                        UnitOfWork.SaveChanges();
                    }
                    catch (System.Data.Linq.ChangeConflictException)
                    {
                        foreach (System.Data.Linq.ObjectChangeConflict occ in _db.ChangeConflicts)
                        {
                            // 使用当前数据库中的值,覆盖Linq缓存中实体对象的值  
                            occ.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues);
                        }
                        UnitOfWork.SaveChanges();
                    }
                  catch (Exception)//如果出现异常,就从数据字典中清除这个键值对
                    {
                        DbFactory.ClearContextByThread(System.Threading.Thread.CurrentThread, _db);
                  }
                }
            }

    我们可以看到,数据上下文的ChangeConflicts属性用来获取所有成员的并发冲突,这时,它所有冲突遍历后,然后进行Resove 将冲突进行解决,最后再把上下文提交到数据库覆盖掉原来的{1,zzl,female},数据库中最后保存的内容将是A2客户端修改的值了。

    回到目录

  • 相关阅读:
    Go语言学习资源
    优秀编程学习网站
    我对架构的理解
    【转】TCP协议中的三次握手和四次挥手(图解)
    【转】asp.net c# 网上搜集面试题目大全(附答案)
    spring framework 4 源码阅读
    浮点类型
    把二元查找树转变成排序的双向链表
    用模板写快速排序-链表
    用模板写快速排序-数组
  • 原文地址:https://www.cnblogs.com/lori/p/3144168.html
Copyright © 2011-2022 走看看