2013-04-18 45 views
2

一般來說,是否有一個接口,指示TransactionScope-意識?是否有一個利用TransactionScope的常用數據庫列表? (它是什麼延伸DbConnection或執行IDbConnection?)哪些數據庫庫與TransactionScope配合使用?

TransactionScope和協作數據庫之間的關係是什麼?即,TransactionScope是否以某種方式搜索活動連接並調用適當的begin/commit/rollback方法?數據庫是否查找環境TransactionScope?或兩者?

如有必要,背景。我正在處理一種利用幾種不同交易類策略的舊DAL:

// 
// transactionless queries 
// 

// Microsoft.Practices.EnterpriseLibrary.Data. ... 
Database db = SQLHelper.GetDatabase(); 
DbCommand cmd = db.GetStoredProcComment("doSomething"); 
db.AddInParameter(cmd, "p1", DbType.Guid, Id); 
using (IDataReader r = db.ExecuteReader()) 
{ 
    // etc. 
} 


// 
// Transaction objects being passed around and attached to DbCommands 
// 

// somewhere up the line ... 
DbConnection con = TransactionScopeConnections.GetConnection(db); 
DbTransaction transaction = con.BeginTransaction(); 

// Microsoft.Practices.EnterpriseLibrary.Data. ... 
Database db = SQLHelper.GetDatabase(); 
DbConnection con = TransactionScopeConnections.GetConnections(db); 
DbCommand cmd = db.GetStoredProcComment("doSomething"); 
cmd.Transaction = transaction; 
db.AddInParameter(cmd, "p1", DbType.Guid, Id); 
using (IDataReader r = db.ExecuteReader()) 
{ 
    // etc. 
} 


// 
// queries in TransactionScopes 
// 

using (TransactionScope scope = new TransactionScope()) 
{ 
    // Microsoft.Practices.EnterpriseLibrary.Data. ... 
    Database db = SQLHelper.GetDatabase(); 
    DbCommand cmd = db.GetStoredProcComment("doSomething"); 
    db.AddInParameter(cmd, "p1", DbType.Guid, Id); 
    using (IDataReader r = db.ExecuteReader()) 
    { 
    // etc. 
    } 
    scope.Complete(); 
} 


// 
// both 
// 

Database db = SQLHelper.GetDatabase(); 
using (TransactionScope transactionScope = new TransactionScope()) 
{ 
    DbConnection con = TransactionScopeConnections.GetConnection(db); 
    DbTransaction transaction = con.BeginTransaction(); 

    /* ... build query ... */ 

    query.transaction = transaction; 

    /* ... execute query, read results, if any ... */ 

    transaction.Commit(); 
    transactionScope.Complete(); 

} 

這些是企業圖書館的所有有效選項嗎? TransactionScope形式是無意義的嗎?最後的表格可能是多餘的?

+0

爲什麼VTC?如果問題不清楚或過於寬泛,一些建設性的反饋,而不是一個沉默的VTC,會很好! (積極整理舊的DAL並試圖瞭解正在發生的事情!) – svidgen

+0

這與庫無關。這將與圖書館使用的內容有關。如果他們使用ADO.NET,那麼你是金手指(假設由連接字符串調用的ADO.NET提供程序支持TransactionScope)。 –

+0

@JohnSaunders那麼,我需要查看這些數據庫和/或庫所返回的連接類型是否兼容?而且,這些對象之間的關係的本質是什麼?即,是否需要創建連接並*然後*創建事務?另一種方式?或者要麼訂購? – svidgen

回答

0

要回答你的問題是否有一個接口指出與TransactionScope的兼容性?還是利用TransactionScope的數據庫類型對象列表?

是的,您可以考慮使用IDBTransaction接口來覆蓋.NET框架數據提供者訪問關係數據庫的實現。

當您想要將事務提升爲完全分佈式事務(例如MSDTC)時,我使用TransactionScope的方式看到的方式。 TransactionScope本身並不僅限於ADO.NET,你可以參考Scope and More

+0

那麼,實現'IDBTransaction'的任何東西都會與'TransactionScope'合作? ...我已經重新排列了這個問題,以便將您回答的一般問題帶到最前沿。你是否也知道如何回答第二段中的問題 - TransactionScope和協作庫之間的交互是什麼? – svidgen

+0

請參閱我編輯的答案。 – Turbot

相關問題