温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

LINQ TO SQL分布式事务举例分析

发布时间:2021-12-01 16:03:26 来源:亿速云 阅读:160 作者:iii 栏目:编程语言

本篇内容介绍了“LINQ TO SQL分布式事务举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

LINQ TO SQL,顾名思义,涉及到了数据库操作。那么就会有一个事务的概念,例如,假设我们需要一次性插入两个实体,但希望保证这两个操作的完整性的话。

1. 隐式事务

其实,即便我们不写代码,LINQ TO SQL也会自动创建一个事务的。默认事务隔离级别为ReadCommitted

2. 显式事务

我们也可以自己写代码,来明确地控制事务,默认事务隔离级别为ReadCommitted

3. LINQ TO SQL分布式事务

我们也可以使用TransactionScope对象,来定义LINQ TO SQL分布式事务。

注意:TransactionScope的默认隔离级别为可串行化,可能带来并发锁冲突问题。

***大概要谈一下并发控制的问题:这个问题的出现就在于,某些时候,某个客户端读取到了数据,然后它断开了,在本地修改;同时,另外一个客户端也读取到了数据,并且修改并提交了。此时,***个客户端如果再进行更新,就应该是有所问题的。这就是所谓的并发问题。

LINQ TO SQL通过在submitchanges方法的时候指定ConflictMode来定义并发控制行为:
◆FailOnFirstConflict(默认的)
◆ContinueOnConflict

下面有一个例子,讲解了并发冲突时继续操作,并且对冲突项进行解决

var query = from p in ctx.Products where p.CategoryID == 1 select p;  foreach (var p in query)  p.UnitsInStock = Convert.ToInt16(p.UnitsInStock - 1);  try  {  ctx.SubmitChanges(ConflictMode.ContinueOnConflict);  }  catch (ChangeConflictException)  {  foreach (ObjectChangeConflict cc in ctx.ChangeConflicts)  {  Product p = (Product)cc.Object;  Reponse.Write(p.ProductID + "  ");  cc.Resolve(RefreshMode.OverwriteCurrentValues);   // 放弃当前更新,所有更新以原先更新为准  }  }

“LINQ TO SQL分布式事务举例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI