【问题标题】:transactionscope locks the tablestransactionscope 锁定表
【发布时间】:2013-07-01 09:13:56
【问题描述】:

在我的应用程序中,事务范围在那里,在里面我正在对 dc 对象进行所有复制操作,最后将执行 dc.submittchanges()。

事务作用域会锁定 dc 中存在的表吗?这会导致任何死锁吗?

例如:

  using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(30)))
            {
                using (var dc = new ProposalDataContext(_ConnectionString))
                {
    scope.Complete(); 
                }
            }

【问题讨论】:

    标签: c# sql sql-server asp.net-mvc linq


    【解决方案1】:

    TransactionScope 使代码块具有事务性。虽然代码尚未COMMITED 涉及的表将被锁定,但如果另一个进程请求涉及的表的内容,它将不得不等到事务提交或回滚。

    【讨论】:

    • 当 scope.complete() 被调用时,只有表会被提交?到那时为止,无论加载有 DataLoadOptions 的表是否会被正确锁定?
    • 还有一件事,当我们使用 DataLoadOptions 加载表时,它会将表复制到 c# 内存吗?如果是这样,为什么另一个事务必须等待范围完成?,一切都将在 c# 内存中对
    • @LLL - 当 scope.Complete() 被调用时,它表明块内的操作已经完成并且事务已经准备好提交。在此之前,这些表将被锁定,是的。
    • @LLL - 因为您指定了using 语句,所以对象将在提交事务后执行内存清理。当垃圾收集器启动时,这取决于 CLR,但事务中使用的对象将由 CLR 释放。
    • 好吧,还有一件事,如果有 10 个用户,它在这种情况下表现如何?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    相关资源
    最近更新 更多