2012-12-19 43 views
2

我已經部署到Azure和Azure SQL,它不支持MSDTC,並且我無法理解如何重寫我的代碼以防止我假設是嵌套連接。我對EF很新,而且我對TransactionScope的瞭解並不好,所以我不確定我是否擁有正確的模式。修復EF嵌套連接以避免Azure上的MSDTC

我試圖使用repos,這是在ObjectContext的一個共享實例上調用的(我試圖在EndRequest上處理但有問題,所以這對我來說是另一個問題)。

我有一個事務在ObjectContext實例上多次調用SaveChanges,但在某些時候它變成了處置。什麼是治理這個,你可以推薦我能做些什麼來使它正常工作?

回答

3

如果您想避免分佈式事務的問題,您必須手動處理連接,因爲您只需要一個打開的連接(每個TransactionScope =一個上下文實例,一個連接用於所有查詢和數據庫更新)。代碼應該是這樣的:

using (var context = new YourObjectContext()) { 
    context.Connection.Open(); 

    ... 
} 

我想使用回購協議,這對 的ObjectContext的共享實例調用(我想處置上EndRequest,但有問題的,所以 這是另一個對問題我)。

如果您在多個請求中共享您的上下文實例,或者更糟糕的是,如果您僅使用單個上下文實例來處理所有請求,則應該立即停止並完全重新設計您的應用程序。 Otherwise it will not work correctly.

+0

您允許多少次在ObjectContext的每個實例上調用SaveChanges? – Savage

+0

沒有限制。 –

+0

問題是我在同一個事務中使用了多個{}塊。我刪除了所有使用的塊,使用共享實例,然後在每個請求結束時處理實例。 – Savage