2009-12-02 99 views
0

我有MS網站上概述的DTC配置,以支持遠程交易。我有下面的代碼總是給我錯誤。亞音速3交易

using (TransactionScope ts = new TransactionScope()) 
{ 
    Category c = new Category(); 
    c.Name = "Cat1"; 
    c.Save(); 

    Product p = Product.SingleOrDefault(x=>x.ProductID==1); 
    p.Title = "new title"; 
    p.Save(); 

    ts.Close(); 
} 

但是,如果我將第二塊代碼移出起訴塊,它的工作就很好。我想要做的是將這兩個代碼塊綁定到一個trascation中。 readon可以是什麼?謝謝,

回答

0

你不指定代碼給你什麼錯誤,但唯一錯誤的是我可以看到的是你沒有在你的TransactionScope上調用Complete。請嘗試以下操作:

using (TransactionScope ts = new TransactionScope()) 
{ 
    Category c = new Category(); 
    c.Name = "Cat1"; 
    c.Save(); 

    Product p = Product.SingleOrDefault(x=>x.ProductID==1); 
    p.Title = "new title"; 
    p.Save(); 

    ts.Complete(); 
} 

您應該實際上並不需要DTC啓用,您可以使用亞音速的SharedDbConnectionScope事務包裝這個代碼。請嘗試以下操作:

using (TransactionScope ts = new TransactionScope()) 
using (SharedDbConnectionScope sharedConnectionScope = new SharedDbConnectionScope()) 
{ 
    Category c = new Category(); 
    c.Name = "Cat1"; 
    c.Save(); 

    Product p = Product.SingleOrDefault(x=>x.ProductID==1); 
    p.Title = "new title"; 
    p.Save(); 

    ts.Complete(); 
} 
+0

感謝您的回答。這是我得到的錯誤,我實際上有這行代碼,仍然有錯誤。 System.Transactions.TransactionManagerCommunicationException:分佈式事務管理器 (MSDTC)的網絡訪問已被禁用。請使用 組件服務管理工具 – Lewis 2009-12-03 14:36:08

+0

在MSDTC的安全配置中啓用DTC以進行網絡訪問確定錯誤消息表示DTC配置不正確。下面的答案可能會幫助您http://stackoverflow.com/questions/7694/how-do-i-enable-mstdc-on-sqlserver但是,正如我上面所述,您應該能夠完全避免使用DTC。 – 2009-12-03 15:06:05

+0

我實際上配置了幾篇文章中描述的DTC。但我仍然有這個錯誤。由於我可以在沒有第二個代碼塊的情況下提交交易,這意味着DTC正在工作。如果我添加了第二個代碼塊,我無法弄清楚是什麼原因導致衝突。我昨天試過你的代碼,它給了我無效的對象錯誤信息。該錯誤在我看來是連接範圍正在使用一個錯誤的數據集。 – Lewis 2009-12-03 17:41:45