在向大家详细介绍Linq开放式并发之前,首先让大家了解下Linq开放式并发控制,然后全面介绍Linq开放式并发。
Linq开放式并发控制
在 LINQ to SQL 对象模型中,当以下两个条件都得到满足时,就会发生“Linq开放式并发冲突”:客户端尝试向数据库提交更改;数据库中的一个或多个更新检查值自客户端上次读取它们以来已得到更新。 此冲突的解决过程包括查明对象的哪些成员发生冲突,然后决定您希望如何进行处理。
Linq开放式并发(Optimistic Concurrency)
说明:这个例子中在你读取数据之前,另外一个用户已经修改并提交更新了这个数据,所以不会出现冲突。
- //我们打开一个新的连接来模拟另外一个用户
- NorthwindDataContext otherUser_db = new NorthwindDataContext();
- 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() ;
- 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)
- {
- //发生异常!
- }
【编辑推荐】