加入收藏 | 设为首页 | 会员中心 | 我要投稿 玉林站长网 (https://www.0775zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 云计算 > 正文

LINQ TO SQL分布式事宜

发布时间:2022-04-20 14:13:49 所属栏目:云计算 来源:互联网
导读:在向大家详细介绍LINQ TO SQL分布式事务之前,首先让大家了解下隐式事务和显式事务,然后全面介绍LINQ TO SQL分布式事务。 LINQ TO SQL,顾名思义,涉及到了数据库操作。那么就会有一个事务的概念,例如,假设我们需要一次性插入两个实体,但希望保证这两个
         在向大家详细介绍LINQ TO SQL分布式事务之前,首先让大家了解下隐式事务和显式事务,然后全面介绍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);   
// 放弃当前更新,所有更新以原先更新为准  
}  

(编辑:玉林站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读