我们有一个 DAL,它需要将许多数据库插入包装在一个我们可以回滚或提交的事务中。
处理该问题的最佳做法是什么?
我们目前正在做以下事情:
- 创建数据库连接和事务
- 用表示要执行的操作的所有类填充一个集合。通过构造函数传入连接。
- 在 try/catch 中,遍历所有操作类并调用它们的 Publish() 方法
- 如果成功则提交(关闭连接)或如果错误则回滚(关闭连接)。
这个过程可能需要一些时间,我们似乎用完了池中的数据库连接。有没有更好的方法来管理交易?
这是使用SQL 2008、.net 3.5和4.1版本的企业库数据访问。
最佳答案
您输入错误,或者问题可能是因为您将 SqlConnection 传递给 Publish 方法(而不是传递 SqlTransaction)。
SqlTransaction 有一个连接属性,所有的更新都应该使用它。
所以你想做类似的事情
// Create connection
SqlConnection connection = ObtainSqlConnection()
// Create transaction
SqlTransaction sqlTransaction = connection.BeginTransaction();
try
{
foreach (Action action in collectionOfActionsToPerform)
{
action.Publish(sqlTransaction)
}
sqlTransaction.Commit();
}
catch
{
sqlTransaction.Rollback();
}
如果这是误解,请尝试发布一些伪代码。
关于c# - 跨多个事务管理 SQL 数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1212816/