2010-04-29 42 views
0

我有兩個服務與兩個不同的數據存儲(即SQL)交談。我使用的TransactionScope: 如:WCF事務範圍SQL插入表鎖

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(); 
} 

服務1鎖定該表(用戶),直到交易完成使隨後的交易,與該表的順序。有沒有辦法克服這個鎖,所以在執行上面的代碼時,可以有多個對SQL服務1表的併發調用?

我將不勝感激任何輸入。

在此先感謝。

Lihnid

+0

@lihnid,我想我已經把你弄錯了......我的不好。快照隔離將無法使用,因爲您正在使用分佈式事務。 http://msdn.microsoft.com/en-us/library/ms179599.aspx。你使用的是SQL Server 2005還是2008? – 2010-05-02 23:49:20

+0

嗨Tuzo,謝謝你的回覆,Iam使用SQL 2005。 – lihnid 2010-05-03 16:56:54

回答

0

我猜你可能對你的用戶或付款表觸發器更新另外一個。

最有可能的情況是,您的保存調用可能會執行一些選擇,您無法在插入的相同proc中執行此操作。這會導致太多的鎖定。確定是否需要用一個單獨的調用插入數據庫,使用內部的新事務處理器並取消選項,從事務中刪除選擇。我知道你的選擇會有nolock,但在SQL 2005 vs舊版本中它似乎被忽略。我有這個相同的問題。

儘可能簡化您的所有來電。