我有两个服务与两个不同的数据存储(即SQL)通信。我正在使用transactionscope: 例如:
using(TransactionScope scope = new TransactionScope())
{
service1.InsertUser(user);//Insert to SQL Service 1 table User
service2.SavePayment(payment);//Save payment SQL Service 2 table payment
scope.Complete();
}
Service1正在锁定表(User),直到事务完成,从而使该表的后续事务顺序完成。有没有办法克服锁定,因此在执行上述代码时可以对SQL service1表进行多次并发调用?
我很感激任何意见。
先谢谢。
Lihnid
答案 0 :(得分:0)
我猜你的用户或付款表上可能有更新另一个的触发器。
最可能的情况是你的保存调用可能会做一些选择,你在插入的同一个proc中无法做到。这导致过多的锁定。确定是否需要插入单独的数据库调用,使用内部新的transactionscope和suppress选项,从事务中删除select。我知道你的选择会有nolock,但在sql 2005和旧版本中它似乎被忽略了。我遇到了同样的问题。
尽可能简化所有通话。