在 C# 中将 TransactionScope 与数据库一起使用

Use of TransactionScope with Databases in C#

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

当我最后不写 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 ? 
}

提前致谢。

是的。

从这里...

// 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

是的。

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

如果您不调用 database.SaveChanges(),下次数据库将在该特定位置打开新连接时,它将不包含旧数据。

我对事务范围有点谨慎...