我假设在以下方式使用DataContext时我会得到自动回滚:
更新我实际上两次致电SubmitChanges
,但问题仍然适用。
public void UpdateUser(User user)
{
using (var context = new UserDataContext())
{
//update stuff.
context.SubmitChanges();
//update stuff.
context.SubmitChanges();
}
}
当出现问题时,没有回滚。
相反,为了提供回滚,我实现了以下内容:
public void UpdateUser(User user)
{
var context = new UserDataContext();
try
{
context.Connection.Open();
context.Transaction = context.Connection.BeginTransaction();
//update stuff.
context.SubmitChanges();
context.Transaction.Commit();
}
catch (Exception e)
{
context.Transaction.Rollback();
throw;
}
finally
{
context.Dispose();
}
}
很多比我想要的管道更多。是否有更好的方法向DataContext指示您想要自动回滚?
答案 0 :(得分:4)
如果不在外部事务中(例如TransactionScope
),SubmitChanges
会为您启动事务,并且如果发生异常则应自动回滚。
建议您发布导致问题的实际代码和发生的异常。
如果您正在执行多个SubmitChanges
并希望它们是原子的,请换入TransactionScope
:
using (TransactionScope ts = new TransactionScope())
{
blah1.SubmitChanges()
blah2.SubmitChanges();
ts.Commit();
}