这是我的代码:
TransactionScope trans = new TransactionScope();
dbDataContext db = new dbDataContext()
// did some insert
var user = new User();
user.ID = 1;
user.Name = "Nick";
db.Users.Add(user);
db.SubmitChanges();
trans.Complete();
现在,如果在保存更改时发生错误,我该如何回滚事务?
最佳答案
您可以通过两种方式在 Entity Framework 中使用事务。一个使用 TransactionScope,另一个使用数据库事务。
要使用数据库事务,请使用以下代码示例:
using (dbDataContext db = new dbDataContext())
using (var dbContextTransaction = db.Database.BeginTransaction())
{
try
{
var user = new User(){ID = 1, Name = "Nick"};
db.Users.Add(user);
db.SaveChanges();
dbContextTransaction.Commit();
}
catch (Exception)
{
dbContextTransaction.Rollback();
}
}
下面是 EF 的 TransactionScope 的示例:
using (TransactionScope tranScope = new TransactionScope())
using (dbDataContext db = new dbDataContext())
{
try
{
var user = new User(){ID = 1, Name = "Nick"};
db.Users.Add(user);
db.SaveChanges();
tranScope.Complete();
}
catch(Exception ex){}
}
如您所见,对于 TransactionScope,您不需要调用任何回滚方法。如果您不调用 Complete() 方法,则事务不会被提交并在被释放之前自动回滚。
关于c# - 如何在 Entity Framework 中使用 LINQ-to-SQL 回滚事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46628560/