2013-01-08 96 views
0

在下面的鏈接上提出的問題也有很好的答案,但在此之後我的問題就開始了。實體框架SaveChanges(False)在使用TransactionScope時失敗

Using Transactions or SaveChanges(false) and AcceptAllChanges()?

我想按我的要求,給出如下代碼


MyEntities context1 = new MyEntities(); 

... 
... 
// some code for changing the table data in Context 1. 
... 

MyEntities context1 = new MyEntities(); 

using (TransactionScope scope = new TransactionScope()) 
{ 
    context1.SaveChanges(false); // LABEL 1 
    context2.SaveChanges(false); // LABEL 2 
    scope.Complete();    // LABEL 3 
    context1.AcceptAllChanges(); // LABEL 4 
    context2.AcceptAllChanges(); // LABEL 5 
} 

事情能正常工作,直到行標有// LABEL 1 但是上線// LABEL 2失敗,說 「底層提供程序在打開時失敗。」

注意:請注意,Context1,Context2是同一個類型的2個不同實例。

任何人都可以幫助我嗎?

+1

調試任何內容的第一步是查看完整的錯誤消息。查看內部異常(s)。 – usr

回答

0

這個答案或許可以解釋你的問題的原因: https://stackoverflow.com/a/3081776/655625 您可能需要重新打開context1.SaveChanges(false);行後的連接。 如用:

context2.Database.Connection.Open(); //before the second SaveChanges(false) 

然而,仔細閱讀,你會發現,你正在做的分佈式事務處理方式,這對方的回答(從第一個鏈接)顯示的替代(更詳細的)來避免分佈式事務。 https://stackoverflow.com/a/794785/655625