2013-07-01 85 views
1

在我的应用程序中,事务范围在那里,我正在做所有的复制操作到dc对象和finnally dc.submittchanges()将被执行。transactionscope锁定表

事务范围是否锁定了当前存在于dc中的表,这是否会导致死锁?

例如:

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

回答

7

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

+0

当scope.complete()被调用时,那么只有表将被提交?。直到那个时候,无论DataLoadOptions加载的表将被锁定正确吗? – Naruto

+0

另外还有一件事,当我们使用DataLoadOptions加载表时,它是否会将表复制到c#内存?如果是的话,为什么另一个事务必须等待范围的完成?一切都将在c#内存中 – Naruto

+1

@LLL - 当范围.Complete()被调用,它表示块内的操作已完成,并且事务已准备好提交。在此之前表格将被锁定,是的。 –