作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码:
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/
我是一名优秀的程序员,十分优秀!