使用SQL/ADO,让我思考一些我认为应该在逻辑上包含在.net框架中的东西,我想知道是否存在这样的事情,让我解释一下.
是否存在一个本质上是事务管理器的对象,您将命令(工作项)传递给同一个我认为有必要也为事务中的每个工作项传递回滚操作.
例如
让我们说我想执行以下操作:
现在,如果出现问题,我需要手动实现回滚策略,那么可能有一种方法可以使用oob .net功能将这些工作项作为事务进行管理?
我的考虑因素是,要求项目自动回滚,但能够手动控制每个工作项回滚期间发生的事情,这似乎很实用.
另一件事是微软用LINQ做的事情非常棒,有效地使用SQL查询所有类型的东西,而不仅仅是SQL表.那么也许LINQ有一些交易模型?
谢谢,如果你知道这样的事情?
您可以使用TransactionScope类来开始事务,但是您在该事务中执行的任何操作都必须是"事务感知",并知道如何回滚事务.
Brent VanderMeide在dnrTV上做了两部分关于如何编写了解TransactionScope的课程的系列文章.这是第1部分,这是第2部分.
通常,这种意义上的事务意味着数据库 IO,而不是文件系统操作。在 ADO.Net 2.0 中,您将执行类似以下代码的操作。
对于其他类型的事务,我建议查看 MS DTC(分布式事务协调器)。这将允许您的事务跨越不同的机器,而且我还相信这允许您登记要回滚的自定义操作。
我希望这有帮助。
using (SqlConnection connection =
new SqlConnection(connectionString))
{
SqlCommand command = connection.CreateCommand();
SqlTransaction transaction = null;
try
{
// BeginTransaction() Requires Open Connection
connection.Open();
transaction = connection.BeginTransaction();
// Assign Transaction to Command
command.Transaction = transaction;
// Execute 1st Command
command.CommandText = "Insert ...";
command.ExecuteNonQuery();
// Execute 2nd Command
command.CommandText = "Update...";
command.ExecuteNonQuery();
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
finally
{
connection.Close();
}
}
Run Code Online (Sandbox Code Playgroud)