在C#中使用TransactionScope和数据库

时间:2016-02-24 09:50:42

标签: c# .net transactionscope

考虑下面给出的示例代码片段。

当我最后没有写transaction.Complete();时,对数据库所做的更改是否会被还原?

   using (var transaction = new System.Transactions.TransactionScope())
    {

      var database = new DatabaseContext();

      var userA = database.Users.Find(1);

      var userB = database.Users.Find(2);
      userA.Name = "Admin";

      database.SaveChanges();
      userB.Age = 28;
      database.SaveChanges();
      transaction.Complete(); // Do changes done by database.saveChanges(); gets reverted if this statement is ommited ? 
}

先谢谢。

2 个答案:

答案 0 :(得分:2)

从这里......

// The Complete method commits the transaction. If an exception has been thrown,
        // Complete is not  called and the transaction is rolled back.
        scope.Complete();

https://msdn.microsoft.com/en-us/library/ee818746%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

答案 1 :(得分:2)

是的。

但你为什么需要呢?在给定的示例中,一个简单的数据库上下文可以满足您的要求。

如果下次数据库在该特定位置打开新连接时未调用InputExt.prototype.info = function() { console.log(this); } var element = document.body.appendChild(new InputExt()); element.info(); ,则不会包含旧数据。

我对交易范围有点谨慎......