All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
.NET,2.0,中的自定义配置处理_[Asp.Net教程]
Transact_SQL小手册(各种sql语句大集合)_[SQL,Server教程]
SQL语句查询是否为空 =null及null_[SQL Server教程]
通过PHP连接My SQL的两种方法简介_[PHP教程]
C#教程:线程同步
SQLServer7.0安装问题_[SQL,Server教程]
PHP安全之:重燃你的Php安全之火_php资料_编程技术
2个页面间不通过Session与url的传值方式_[Asp.Net教程]
漫谈Visual,C#的组件设计方法_.net资料_编程技术
原创:在ASP.NET2.0中实现主页嵌套_.net资料_编程技术
Reading number is top 10 pictures
两个妞在等世界上最短的火车
Summer is most suitable for young people to travel in China10
随便发几张图
Get girl by your hand
Small QiShu -- ShuangShuangPan1
The terra-cotta warriors2
你白吃了多少药
Absolutely shocked. National geographic 50 animal photographys4
The woman fight much more than men
Fan bingbing black wings for platform and DanLuoWang believes beauty1
Download software ranking
Call Of Duty2
Eclipse 4.2.2 For Win64
C#编程思想
WebService在.NET中的实战应用教学视频 → 第5集
C语言教程TXT
Boxer vs Yellow2
Photoshop 8.0图象编辑软件
软件工程思想
Call Of Duty5
JSP+Ajax Web development typical examples


并发
两个或更多用户同时尝试更新同一数据库行的情形。
并发冲突
两个或更多用户同时尝试向一行的一列或多列提交冲突值的情形。
并发控制
用于解决并发冲突的技术。
开放式并发控制
先调查其他事务是否已更改了行中的值,再允许提交更改的技术。相比之下,保守式并发控制则是通过锁定记录来避免发生并发冲突。之所以称作开放式控制,是因为它将一个事务干扰另一事务视为不太可能发生。
冲突解决
通过重新查询数据库刷新出现冲突的项,然后协调差异的过程。刷新对象时,LINQ to SQL 更改跟踪器会保留以下数据:
最初从数据库获取并用于更新检查的值 通过后续查询获得的新数据库值。
LINQ to SQL 随后会确定相应对象是否发生冲突(即它的一个或多个成员值是否已发生更改)。如果此对象发生冲突,LINQ to SQL 下一步会确定它的哪些成员发生冲突。LINQ to SQL 发现的任何成员冲突都会添加到冲突列表中。

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


Optimistic Concurrency



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

//我们打开一个新的连接来模拟另外一个用户
NorthwindDataContext otherUser_db = new NorthwindDataContext() { Log = db.Log };
var otherUser_product = otherUser_db.Products.First(p => p.ProductID == 1);
otherUser_product.UnitPrice = 999.99M;
otherUser_db.SubmitChanges();
//我们当前连接
var product = db.Products.First(p => p.ProductID == 1);
product.UnitPrice = 777.77M;
try {
db.SubmitChanges();//当前连接执行成功
}
catch (ChangeConflictException) {
}

说明:我们读取数据之后,另外一个用户获取并提交更新了这个数据,这时,我们更新这个数据时,引起了一个并发冲突。系统发生回滚,允许你找回最近更新的数据,让你决定继续你的更新。

//当前用户
var product = db.Products.First(p => p.ProductID == 1);
//我们打开一个新的连接来模拟另外一个用户
NorthwindDataContext otherUser_db = new NorthwindDataContext() { Log = db.Log };
var otherUser_product = otherUser_db.Products.First(p => p.ProductID == 1);
otherUser_product.UnitPrice = 999.99M;
otherUser_db.SubmitChanges();
//当前用户修改
product.UnitPrice = 777.77M;
try {
db.SubmitChanges();
}
catch (ChangeConflictException) {
//发生异常!
}

Transactions事务


LINQ to SQL 支持三种事务模型,分别是:



  • 显式本地事务:调用 SubmitChanges 时,如果 Transaction 属性设置为事务,则在同一事务的上下文中执行 SubmitChanges 调用。成功执行事务后,要由您来提交或回滚事务。与事务对应的连接必须与用于构造 DataContext 的连接匹配。如果使用其他连接,则会引发异常。
  • 显式可分发事务:可以在当前 Transaction 的作用域中调用 LINQ to SQL API(包括但不限于 SubmitChanges)。LINQ to SQL 检测到调用是在事务的作用域内,因而不会创建新的事务。在这种情况下,vbtecdlinq 还会避免关闭连接。您可以在此类事务的上下文中执行查询和 SubmitChanges 操作。
  • 隐式事务:当您调用 SubmitChanges 时,LINQ to SQL 会检查此调用是否在 Transaction 的作用域内或者 Transaction 属性是否设置为由用户启动的本地事务。如果这两个事务它均未找到,则 LINQ to SQL 启动本地事务,并使用此事务执行所生成的 SQL 命令。当所有 SQL 命令均已成功执行完毕时,LINQ to SQL 提交本地事务并返回。

1.Implicit(隐式)


说明:这个例子在执行SubmitChanges()操作时,隐式地使用了事务。因为在更新2种产品的库存数量时,第二个产品库存数量为负数了。这导致了更新产品全部失败了,系统回滚到这个操作的初始状态。

try {
Product prod1 = db.Products.First(p => p.ProductID == 4);
Product prod2 = db.Products.First(p => p.ProductID == 5);
prod1.UnitsInStock -= 3;
prod2.UnitsInStock -= 5;//错误:库存数量的单位不能是负数
//要么全部成功要么全部失败
db.SubmitChanges();
}
catch (System.Data.SqlClient.SqlException e) {
//执行异常处理
}

2.Explicit(显式)


说明:这个例子使用事务封闭数据提交。

using (TransactionScope ts = new TransactionScope()) {
try {
Product prod1 = db.Products.First(p => p.ProductID == 4);
Product prod2 = db.Products.First(p => p.ProductID == 5);
prod1.UnitsInStock -= 3;
prod2.UnitsInStock -= 5;//错误:库存数量的单位不能是负数
db.SubmitChanges();
}
catch (System.Data.SqlClient.SqlException e) {
//执行异常处理
}
}


作者:李永京(YJingLee's Blog)
出处:http://lyj.cnblogs.com





归海一刀 published in(发表于) 2014/1/30 1:02:32 Edit(编辑)
LINQ体验(10)——LINQ,to,SQL语句之开放式并发控制和事务_[Asp.Net教程]

LINQ体验(10)——LINQ,to,SQL语句之开放式并发控制和事务_[Asp.Net教程]

LINQ体验(10)——LINQ to SQL语句之开放式并发控制和事务_[Asp.Net教程]

告诉大家一个好消息:微软于2月1日发布了Visual Studio Team System 2008 Team Suite简体中文版,您可以在这里下载Visual Studio Team System 2008 Team Suite简体中文版90 天试用版。今天简单的学习下开放式并发控制和事务的内容,具体详细的内容现在可以参看MSDN了。


Simultaneous Changes开放式并发控制



下表介绍 LINQ to SQL 文档中涉及开放式并发的术语:


术语 说明


添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.