我想在循環內使用事務作用域。整個循環使用到數據庫的單個連接進行。我正在使用實體框架4進行數據庫訪問。在循環的第二次迭代期間,當執行LINQ to Entites查詢時,會拋出一個異常,指出服務器上的MSDTC不可用。TransactionScope總是嘗試升級到MSDTC
我讀過,明確打開連接,然後爭取交易應該解決這個問題,但它沒有。以下是反映正在發生的基本操作的示例代碼。
有關如何防止升級到MSDTC的任何想法?
Using context = New MyEntities()
Dim connection = context.Connection
connection.Open()
For index = 0 to (Me.files.Count - 1)
Dim query = From d In context.Documents
Where (d.DocumentID = documentID)
Select d.Status
Dim status = query.FirstOrDefault()
Using trans = New TransactionScope()
connection.EnlistTransaction(Transaction.Current)
Dim result = context.UpdateStatus(True)
If (result = 1) Then
WriteToFile()
trans.Complete()
End If
End Using
Next
End Using
編輯:相反的TransactionScope的,如果我用connection.BeginTransaction(),器transaction.commit(),和transaction.Rollback(),它工作正常。但是,我仍然想找到一種使TransactionScope工作的方法。
這個論壇發貼幫助? http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/c3fd7555-7fff-44b8-8e1e-030073c20597/它看起來像建議啓動事務,然後打開連接,然後運行您的查詢。 – mkedobbs 2011-05-05 16:19:52
想法是打開連接,然後使用一個連接運行所有查詢 - 出於性能原因。 – NYSystemsAnalyst 2011-05-05 16:22:33
如果使用連接池,則沒有性能原因。 – 2011-05-05 20:42:09