我正在使用一个DataSet来保存SQL Azure数据库中的不同表。我使用transactionScope将数据插入到相关表中(每个表大约1-3行)。 在我的数据库中,每个插入操作对每个用户都是唯一的,因此永远不会重复。
在测试场景中,我测试并行插入数据并随后删除此数据。使用TransactionScope进行删除操作,我得到了死锁。如果不使用TransactionScope进行删除,则删除语句有时最多需要40秒。 所以似乎Azure在插入期间锁定整个表,删除必须等待...
有没有办法避免操作需要这么长时间?可能只使用行锁定或更改transactionScope选项?
我的交易:
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
transactionOptions.Timeout = TransactionManager.MaximumTimeout;
using(TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew, transactionOptions))
{
InsertIntoTable1;
InsertIntoTable2;
InsertIntoTable3;
scope.Complete();
}
DeleteTable3Entity;
DeleteTable2Entity;
DeleteTable1Entity;