背景
我有一個MVC應用程序和一個Windows服務,訪問相同的數據訪問庫,利用EntityFramework。 Windows服務監視幾個表上的某些活動並執行一些計算。在我的EF項目中使用System.Transactions時應該考慮什麼?
我們使用的是DAL項目對幾百個數據庫,生成在運行時環境的連接字符串。
我們有許多功能(存儲過程和.NET方法,其對EF實體調用),這是因爲我們使用的數據的範圍非常密集分貝具有阻止彼此的潛力。
問題
windows服務不是那麼重要,它不能等待。如果某些東西必須被阻止,那麼Windows服務可以。早些時候,我發現了很多SO問題,它們指出,在將事務隔離級別設置爲READ UNCOMMITTED以最小化鎖定時,需要使用System.Transactions
。
我想這一點,我可能會誤解是怎麼回事,所以我需要一些澄清。
在Windows服務的方法的結構,像這樣:
private bool _stopMe = false;
public void Update()
{
EntContext context = new EntContext();
do
{
var transactionOptions = new System.Transactions.TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
using (var transactionScope = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.Required, transactionOptions))
{
List<Ent1> myEnts = (from e....Complicated query here).ToList();
SomeCalculations(myEnts);
List<Ent2> myOtherEnts = (from e... Complicated query using entities from previous query here).ToList();
MakeSomeChanges(myOtherEnts);
context.SaveChanges();
}
Thread.Sleep(5000); //wait 5 seconds before allow do block to continue
}while (! _stopMe)
}
當我執行我的第二個查詢,一個異常被拋出:
The underlying provider failed on Open.
Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please
enable DTC for network access in the security configuration for MSDTC using the
Component Services Administrative tool.
The transaction manager has disabled its support for remote/network
transactions. (Exception from HRESULT: 0x8004D024)
我認爲我不應該叫該使用塊中有多個查詢?第一個查詢返回就好了。這是一次在一個數據庫上執行的(其他實例正在不同的線程中運行,並且此線程中的任何內容都不會觸及其他實例)。
我的問題是,這是它應該如何使用,或者是有更多的這個,我應該知道嗎?
注:這是一個監控功能,所以必須反覆運行。
您使用的是DbContext還是ObjectContext?您當前的問題可能存在,因爲您讓EF控制數據庫連接的生存期,因此它最可能爲每個查詢使用不同的連接 - 這需要分佈式事務。順便說一句。你的交易永遠不會提交。 – 2012-07-18 20:59:17
我正在使用DbContext。我想知道如何更密切地控制我在EntityFramework中的連接。至於承諾交易,這可能源於我對交易的大量誤解。今天是我第一次使用System.Transaction,所以我現在還不太快。 – CodeWarrior 2012-07-18 21:31:25
檢查[這篇文章](http://blogs.msdn.com/b/diego/archive/2012/01/26/exception-from-dbcontext-api-entityconnection-can-only-be-constructed-with-a - 封閉 - DBConnection進行。aspx) - 它討論瞭如何控制DbContext API中連接的生命週期。 – 2012-07-18 21:44:29