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客户端修改的值了。
本文转自博客园张占岭(仓储大叔)的博客,原文链接:LINQ-to-SQL那点事~LINQ-to-SQL中的并发冲突与应对,如需转载请自行联系原博主。
LINQ-to-SQL那点事~LINQ-to-SQL中的并发冲突与应对相关推荐
- DRDS SQL 审计与分析——全面洞察 SQL 之利器
背景 数据库存储着系统的核心数据,其安全方面的问题在传统环境中已经成为泄漏和被篡改的重要根源.而在云端,数据库所面临的威胁被进一步的放大.因此,对云数据库的操作行为尤其是全量 SQL 执行记录的审计日 ...
- 在Linq to Sql中管理并发更新时的冲突(3):使用记录的时间戳进行检测
我们描述了Linq to Sql检测在更新时是否产生了冲突的基本方法:将该记录每个字段原来的值和更新时的值进行对比,如果稍有不同则意味着记录被修改过,因此产生了更新冲突.不过您是否有这样的感觉,这种方 ...
- SQL Server 2008使用LINQ进行数据访问(转载自IT168 [ http://www.it168.com/ ])
SQL Server 2008使用LINQ进行数据访问 2008年09月23日 IT168网站原创 作者:微软中国 编辑:胡铭娅 评论:0条 本文Tag: LINQ SQL Server 2008 微 ...
- LINQ篇:ASP.NET using LINQ(Part One) Scott大师的产物
[原文地址]Using LINQ with ASP.NET (Part 1) [原文发表日期]Sunday, May 14, 2006 9:49 PM 最近使我激动不已的新鲜事之一就是LINQ系列技术 ...
- linq拼接where语句_C# 10. LINQ 的三种查询语句写法
C# 10. LINQ 的三种查询语句写法 前言: LINQ(语言集成查询)是 C#编程语言中的一部分.它在.NET Framework 3.5 和 C#3.0 被引入,在 System.Linq 命 ...
- 【LINQ技术】扩展特性和LINQ操作符
LINQ特有的编程结构 LINQ就像是嵌入到C#中的强类型查询语言,尽管和SQL查询很像,但语法却并不相同,甚至还有截然相反的一面. LINQ是在.NET发展到3.5版的时候被引进的,C#和VB语言都 ...
- Linq To Xml学习 - 1.LINQ to XML 概述
LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework 编程语言中处理 XML. 它将 XML 文档置于内存中,这一点很像文档对象模型 ...
- 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 ...
- NoSQL和SQL的那些事
什么是NoSQL? NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称. 它具有非关系型.分布式.不提供ACID ...
最新文章
- 【最强ResNet改进系列】Res2Net:一种新的多尺度网络结构,性能提升显著
- centos6.5下iptables基础知识详解与配置
- none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
- springboot templates读取不到_整合spring mvc + mybatis,其实很简单,spring boot实践(5)
- java == 与 equals 相同与不同点
- python精要(72)-VMDK操作(2)
- git关闭密码自动存储_项目在 git 里怎样合理的保存配置文件(服务器密码等敏感内容)...
- 操作系统(八)进程管理——进程同步
- Weka的下载与安装
- python分析掷骰子游戏
- 软件测试工程师工作总结
- 无向图的邻接矩阵平方的实际意义解释
- 重力加速度传感器的启示
- 用opencv使用大恒相机的痛苦经历
- 计算机体系结构的一知半解
- 管清友的股票投资课_笔记 _Part3
- 基于遥感的大蒜种植面积量测
- 解决‘parent.relativePath‘ of POM xxx points at yyy instead of zzz please verify your project structure
- iOS开发面试知识整理 – OC基础 (二)
- 云计算之OpenStack架构详解
热门文章
- 贵州:2018经济增速继续领先 2019“九字真言”主攻高质量
- Android 如何添加一个新的时区
- mxnet导入图像数据
- Docker容器镜像删除不掉解决办法?
- MySQL常见的存储引擎的区别?
- ajax deletemapping,springmvc使用put,delete方法传参问题,以及使用@PutMapping注解和@DeleteMapping注解...
- oracle 加号 用法,Oracle的加号(+)表示法和ansi JOIN符号之间的区别?
- 账号管理工具_新媒体账号管理工具,自媒体运营神器,管理多个账号很简单
- [过年菜谱之]清蒸鲍鱼
- MySQL 基准测试(sysbench)工具安装时提示 automake 1.10.x (aclocal) wasn‘t found, exiting