Linq 2 SQL - 经验心得-处理并发机制 (二)

首先要说明的是,在项目中,我们依赖于Linq2SQL做级联更新,级联更新是我们在业务层自己控制。

LINQ2SQL的Optimistic Concurrent(乐观并发)机制一,没有使用Timestamp(version列)

先看一段代码
private static void OptimisticConcurrentInColumn()
        {
            Product prod;
            using (NutShellDataContext db = new NutShellDataContext())
            {
                db.Log = Console.Out;
                var query = from p in db.Products
                            where p.ID == 1
                            select p;

                prod = query.First() as Product;
                prod.Description = "Widget";
                prod.Discontinued = true;

                var queryCust = from c in db.Customers
                                where c.ID == 1
                                select c;

                db.SubmitChanges();

                Console.WriteLine("Update product Successfully");

            }
            Console.ReadLine();
        }

在Product表中,没有version number的字段,也就是没有Timestamp. 当默认通过vs.net中的工具生成Product类之后,看看linq2sql是如何处理并发的。

UPDATE [dbo].[Product]
SET [Description] = @p3
WHERE ([ID] = @p0) AND ([Description] = @p1) AND ([Discontinued] = 1) AND ([LastSale] = @p2)
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- @p1: Input VarChar (Size = 6; Prec = 0; Scale = 0) [Widget]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [2007-1-1 0:00:00]
-- @p3: Input VarChar (Size = 7; Prec = 0; Scale = 0) [Widgets]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1

生成的SQL比较有意思,所有列都在where条件中,这个就是LINQ2SQL在没有timestamp时用来做乐观竞争的机制。当一条记录如果在当前用户修改之前,别人已经修改了,LINQ2SQL会阻止当前用户的修改。

at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) Exception : S

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值