使用SQL / ADO,让我思考一些我认为逻辑上应该包含在.net框架中的内容,我想知道这样的事情是否存在,让我解释一下。
是否存在一个基本上是事务管理器的对象,您将命令(工作项)传递给同一个我认为有必要也为事务中的每个工作项传递回滚操作。
例如
假设我想执行以下操作:
现在,如果出现问题,我需要手动实施回滚策略,那么可能有一种方法可以使用oob .net功能将这些工作项作为事务进行管理吗?
我的考虑因素是要求自动回滚项目,但能够手动控制每个工作项回滚期间发生的事情,这似乎很实用。
另一件事是微软用LINQ做的事情非常棒,有效地使用SQL查询所有类型的东西,而不仅仅是SQL表。那么也许有一些LINQ的交易模型?
谢谢你,如果你知道这样的话吗?
答案 0 :(得分:5)
您可以使用TransactionScope类开始交易,但您在该交易中执行的任何操作都必须是“交易感知”,并且知道如何回滚交易。
Brent VanderMeide在dnrTV上编写了一个关于如何编写了解TransactionScope的类的系列文章。这是part 1,而这里是part 2。
答案 1 :(得分:0)
通常,这种意义上的事务意味着DB 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();
}
}