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

并发冲突产生的原因

事实上,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客户端修改的值了。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:LINQ-to-SQL那点事~LINQ-to-SQL中的并发冲突与应对,如需转载请自行联系原博主。

LINQ-to-SQL那点事~LINQ-to-SQL中的并发冲突与应对相关推荐

  1. DRDS SQL 审计与分析——全面洞察 SQL 之利器

    背景 数据库存储着系统的核心数据,其安全方面的问题在传统环境中已经成为泄漏和被篡改的重要根源.而在云端,数据库所面临的威胁被进一步的放大.因此,对云数据库的操作行为尤其是全量 SQL 执行记录的审计日 ...

  2. 在Linq to Sql中管理并发更新时的冲突(3):使用记录的时间戳进行检测

    我们描述了Linq to Sql检测在更新时是否产生了冲突的基本方法:将该记录每个字段原来的值和更新时的值进行对比,如果稍有不同则意味着记录被修改过,因此产生了更新冲突.不过您是否有这样的感觉,这种方 ...

  3. SQL Server 2008使用LINQ进行数据访问(转载自IT168 [ http://www.it168.com/ ])

    SQL Server 2008使用LINQ进行数据访问 2008年09月23日 IT168网站原创 作者:微软中国 编辑:胡铭娅 评论:0条 本文Tag: LINQ SQL Server 2008 微 ...

  4. LINQ篇:ASP.NET using LINQ(Part One) Scott大师的产物

    [原文地址]Using LINQ with ASP.NET (Part 1) [原文发表日期]Sunday, May 14, 2006 9:49 PM 最近使我激动不已的新鲜事之一就是LINQ系列技术 ...

  5. linq拼接where语句_C# 10. LINQ 的三种查询语句写法

    C# 10. LINQ 的三种查询语句写法 前言: LINQ(语言集成查询)是 C#编程语言中的一部分.它在.NET Framework 3.5 和 C#3.0 被引入,在 System.Linq 命 ...

  6. 【LINQ技术】扩展特性和LINQ操作符

    LINQ特有的编程结构 LINQ就像是嵌入到C#中的强类型查询语言,尽管和SQL查询很像,但语法却并不相同,甚至还有截然相反的一面. LINQ是在.NET发展到3.5版的时候被引进的,C#和VB语言都 ...

  7. Linq To Xml学习 - 1.LINQ to XML 概述

    LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework 编程语言中处理 XML. 它将 XML 文档置于内存中,这一点很像文档对象模型 ...

  8. sql2012 ssrs_您必须在SQL Server Reporting Services(SSRS)中记录的十件事

    sql2012 ssrs Documentation is never fun. I curse having to do it and I curse the person who didn't d ...

  9. NoSQL和SQL的那些事

    什么是NoSQL? NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称. 它具有非关系型.分布式.不提供ACID ...

最新文章

  1. 【最强ResNet改进系列】Res2Net:一种新的多尺度网络结构,性能提升显著
  2. centos6.5下iptables基础知识详解与配置
  3. none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
  4. springboot templates读取不到_整合spring mvc + mybatis,其实很简单,spring boot实践(5)
  5. java == 与 equals 相同与不同点
  6. python精要(72)-VMDK操作(2)
  7. git关闭密码自动存储_项目在 git 里怎样合理的保存配置文件(服务器密码等敏感内容)...
  8. 操作系统(八)进程管理——进程同步
  9. Weka的下载与安装
  10. python分析掷骰子游戏
  11. 软件测试工程师工作总结
  12. 无向图的邻接矩阵平方的实际意义解释
  13. 重力加速度传感器的启示
  14. 用opencv使用大恒相机的痛苦经历
  15. 计算机体系结构的一知半解
  16. 管清友的股票投资课_笔记 _Part3
  17. 基于遥感的大蒜种植面积量测
  18. 解决‘parent.relativePath‘ of POM xxx points at yyy instead of zzz please verify your project structure
  19. iOS开发面试知识整理 – OC基础 (二)
  20. 云计算之OpenStack架构详解

热门文章

  1. 贵州:2018经济增速继续领先 2019“九字真言”主攻高质量
  2. Android 如何添加一个新的时区
  3. mxnet导入图像数据
  4. Docker容器镜像删除不掉解决办法?
  5. MySQL常见的存储引擎的区别?
  6. ajax deletemapping,springmvc使用put,delete方法传参问题,以及使用@PutMapping注解和@DeleteMapping注解...
  7. oracle 加号 用法,Oracle的加号(+)表示法和ansi JOIN符号之间的区别?
  8. 账号管理工具_新媒体账号管理工具,自媒体运营神器,管理多个账号很简单
  9. [过年菜谱之]清蒸鲍鱼
  10. MySQL 基准测试(sysbench)工具安装时提示 automake 1.10.x (aclocal) wasn‘t found, exiting