gpt4 book ai didi

c# - 哪些数据库库与 TransactionScope 合作?

转载 作者:太空宇宙 更新时间:2023-11-03 16:14:31 27 4
gpt4 key购买 nike

一般来说,是否有一个接口(interface)表明TransactionScope-awareness?是否有利用 TransactionScope 的常用数据库列表? (它是扩展 DbConnection 还是实现 IDbConnection 的东西?)

TransactionScope 与合作数据库之间的关系是什么?即,TransactionScope 是否以某种方式搜索事件连接并调用适当的开始/提交/回滚方法?数据库是否寻找环境 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 形式没有意义吗?最后一种形式可能是多余的吗?

最佳答案

回答您的问题是否有表明与 TransactionScope 兼容的接口(interface)?或者利用 TransactionScope 的数据库类型对象列表?

是的,您可以考虑使用IDBTransaction接口(interface)来覆盖.NET框架数据提供者访问关系数据库的实现。

当您想将事务提升为完整的分布式事务(如 MSDTC)时,我看到使用 TransactionScope 的方式。 TransactionScope本身并不仅限于ADO.NET,可以引用Scope and More

关于c# - 哪些数据库库与 TransactionScope 合作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16093942/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com