Linq开放式并发深入剖析

在向大家详细介绍Linq开放式并发之前,首先让大家了解下Linq开放式并发控制,然后全面介绍Linq开放式并发。

Linq开放式并发控制

在 LINQ to SQL 对象模型中,当以下两个条件都得到满足时,就会发生“Linq开放式并发冲突”:客户端尝试向数据库提交更改;数据库中的一个或多个更新检查值自客户端上次读取它们以来已得到更新。 此冲突的解决过程包括查明对象的哪些成员发生冲突,然后决定您希望如何进行处理。

Linq开放式并发(Optimistic Concurrency)

说明:这个例子中在你读取数据之前,另外一个用户已经修改并提交更新了这个数据,所以不会出现冲突。

 
 
 
  1. //我们打开一个新的连接来模拟另外一个用户
  2. NorthwindDataContext otherUser_db = new NorthwindDataContext();
  3. var otherUser_product =
  4. otherUser_db.Products.First(p => p.ProductID == 1);
  5. otherUser_product.UnitPrice = 999.99M;
  6. otherUser_db.SubmitChanges();
  7. //我们当前连接
  8. var product = db.Products.First(p => p.ProductID == 1);
  9. product.UnitPrice = 777.77M;
  10. try
  11. {
  12. db.SubmitChanges();//当前连接执行成功
  13. }
  14. catch (ChangeConflictException)
  15. {
  16. }

说明:我们读取数据之后,另外一个用户获取并提交更新了这个数据,这时,我们更新这个数据时,引起了一个并发冲突。系统发生回滚,允许你可以从数据库检索新更新的数据,并决定如何继续进行您自己的更新。

 
 
 
  1. //当前用户
  2. var product = db.Products.First(p => p.ProductID == 1);
  3. //我们打开一个新的连接来模拟另外一个用户
  4. NorthwindDataContext otherUser_db = new NorthwindDataContext() ;
  5. var otherUser_product = 
  6. otherUser_db.Products.First(p => p.ProductID == 1);
  7. otherUser_product.UnitPrice = 999.99M;
  8. otherUser_db.SubmitChanges();
  9. //当前用户修改
  10. product.UnitPrice = 777.77M;
  11. try
  12. {
  13. db.SubmitChanges();
  14. }
  15. catch (ChangeConflictException)
  16. {
  17. //发生异常!
  18. }

网站栏目:Linq开放式并发深入剖析
本文地址:http://www.shufengxianlan.com/qtweb/news30/364730.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联