2010-03-31 35 views
6

使用SQL/ADO,让我思考一些我认为应该在逻辑上包含在.net框架中的东西,并且我想知道这样的事情是否存在,让我解释一下。.net,你得到一个交易对象吗?

是否有一个本质上是事务管理器的对象,即您将命令(工作项)传递给同一个事件,我认为还需要为事务中的每个工作项传递回滚操作。

例如

可以说,我想执行以下操作:

  1. 创建一个文件夹
  2. 此文件夹
  3. 在创建一个文件执行像编辑雷吉·基斯一些其他杂项任务,或者真的可以想到可以回滚的动作。

现在目前如果事情失败了,我需要手动执行回滚策略,所以或许存在的方式来管理这些工作项目为使用OOB .NET功能的交易?

我的问题是,它会问很多项目自动回滚,但有能力手动控制每个工作项目回滚期间发生的情况,这似乎很实用。

另一件事是微软用LINQ做的事情真的很棒,有效地让SQL查询各种东西,不仅仅是SQL表格。所以也许有一些与LINQ的交易模式?

谢谢,如果你知道这样的事情?

回答

0

通常,这种意义上的交易意味着数据库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(); 
    } 
} 
5

可以使用TransactionScope类开始交易,但你采取事务中的任何行动都必须“交易意识”,懂得如果事务回滚补偿。

Brent VanderMeide在dnrTV上撰写了一个由两部分组成的系列文章,介绍如何编写有关TransactionScope的类。这里是part 1,这里是part 2

+0

这看起来很有希望,看起来像它不仅限于数据库权利? – 2010-03-31 21:16:19

+0

不是我所知道的,没有。看看视频 - 布伦特写的类不是数据库相关的IIRC。 – 2010-03-31 21:30:01

+0

交易范围非常棒,您可以将.net代码放入交易中。 – 2010-03-31 22:43:26