2011-05-08 53 views
1

我想在分佈式事務中工作,提交它,然後能夠讀取結果。喜歡的東西:TransactionScope:我如何回讀已提交事務的結果?

using(var ts = new TransactionScope()) 
{ 
do work on connection A 
do work on connection B 

ts.Complete(); 
} 

read back work on A 
read back work on B 

因爲TransactionScope的,只要所有的資源都表示,他們將承諾(第2階段開始時)結束,這並不一致地工作,而不是自己犯下(第2階段結束時)和提交發生在另一個線程上。

是否有某種方法來強制提交同步?或者我應該用一些其他模式來回讀結果?

+0

這裏的後端是什麼? – 2011-05-08 15:08:17

+0

後端是Oracle(通過最新的ODP.NET)和MSMQ – remack 2011-05-09 18:05:45

回答

1

通常情況下,我預計這會起作用,因爲您應該被阻止直到它被提交(或回滾)。你可能使用了鎖定避免機制(nolock等)?您可以隨時在另一個可序列化事務中執行讀取操作(即第二個TransactionScope) - 這應確保讀取結果爲真。

+0

我嘗試了第二個TransactionScope,並且遇到了同樣的問題。 – remack 2011-05-09 18:12:44

+0

@remack - 令人驚訝的是;這有點讓交易非交易... – 2011-05-09 18:28:02

+0

它看起來像是由於Oracle事務語義。請參閱此處:[Oracle鏈接](http://download.oracle.com/docs/cd/B14117_01/server.101/b10743/consist.htm#i17856)。特別是表13-2和下面關於參照完整性的段落 - 你不能在第一個事務的寫入提交上等待第二個(讀取)事務。 – remack 2011-05-10 22:11:53

相關問題