我有一個應用程序使用EnterpriseLibrary和Unity,並在一個地方使用TransactionScope。這工作得很好,儘管它運行對SQL Server 2005的事實:EnterpriseLibrary,EF和交易範圍:爲什麼我看到不同的行爲?
// Execute a stored proc using a DbDatabase object inserted by Unity
using(TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
// Update something using the same DbDatabase object
// Run the stored proc above, again
// Assert that the results are different than from the previous call.
}
是的,這故意沒有scope.Complete()
結束:例子是從測試。
我也有另一個應用剛剛開始。它使用實體框架4.1。它訪問同一臺服務器上的同一個數據庫。我試圖使用TransactionScope
,同時「記住更改,驗證更改,回滾更改」的想法。
using(TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
using(ProjectEntities db = new ProjectEntities())
{
Assert.IsFalse(db.tblEntities.Any(e=>e.X == desired_value));
db.tblEntities.Add(new tblEntity() { X = desired_value });
db.SaveChanges();
Assert.IsTrue(db.tblEntities.Any(e=> e.X == desired_value));
}
}
由於MSDTC未被啓用用於網絡訪問,因此會失敗。
現在,這一分鐘,第一個項目的第一個測試成功,第二個測試失敗。
所以我有兩個問題:
有沒有辦法來rejigger我的第二次測試,將維持交易激化到MSDTC?
有人知道我爲什麼會從這兩個框架得到不同的結果嗎? EntLib是否保持分配的單個連接並在其使用的整個過程中打開? EF做相反的事情嗎?
謝謝!這非常有幫助! –