在 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()
,下次数据库将在该特定位置打开新连接时,它将不包含旧数据。
我对事务范围有点谨慎...
考虑下面给出的示例代码片段。
当我最后不写 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()
,下次数据库将在该特定位置打开新连接时,它将不包含旧数据。
我对事务范围有点谨慎...