一般來說,是否有一個接口,指示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
形式是無意義的嗎?最後的表格可能是多餘的?
爲什麼VTC?如果問題不清楚或過於寬泛,一些建設性的反饋,而不是一個沉默的VTC,會很好! (積極整理舊的DAL並試圖瞭解正在發生的事情!) – svidgen
這與庫無關。這將與圖書館使用的內容有關。如果他們使用ADO.NET,那麼你是金手指(假設由連接字符串調用的ADO.NET提供程序支持TransactionScope)。 –
@JohnSaunders那麼,我需要查看這些數據庫和/或庫所返回的連接類型是否兼容?而且,這些對象之間的關係的本質是什麼?即,是否需要創建連接並*然後*創建事務?另一種方式?或者要麼訂購? – svidgen