3 回答
TA贡献1712条经验 获得超3个赞
如果操作在某个阶段失败,您可以使用Transactionwhich 确保恢复在其范围内完成的操作:
using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
using (var del = new PdmContext())
{
DeleteModel.deleteFromAllTables();
}
db.SaveChanges();
scope.Complete(); // commits the transaction
}
现在对数据库的更改将是原子的,因此它只会保留所有更改或根本不保留。为简单起见,我没有包含异常处理代码,但由于任何原因,如果scope.Complete()没有执行并且控制存在事务块而不执行,则事务将回滚。
TA贡献1829条经验 获得超7个赞
您需要使用事务。
看看如何使用它:
using (var dbContextTransaction = PdmContext.Database.BeginTransaction())
{
try
{
// HERE your operation insert etc.
PdmContext.SaveChanges();
dbContextTransaction.Commit(); // here, apply your operation
}
catch (Exception)
{
dbContextTransaction.Rollback(); // here, undo your operations
}
}
TA贡献1853条经验 获得超18个赞
您可以使用事务管理来处理这种情况。
有两种处理方法。
1)您可以对所有操作使用单个 dbcontext,而不是为单个操作创建多个。
using (var context = new SchoolContext())
{
try
{
context.Students.Add(new Student()
{
FirstName = "Rama2",
StandardId = standard.StandardId
});
context.Courses.Add(new Course() { CourseName = "Computer Science" });
context.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
Console.WriteLine("Error occurred.");
}
}
2) 使用单个 DbContextTransaction 对象:
using (var context = new SchoolContext())
{
context.Database.Log = Console.Write;
using (DbContextTransaction transaction = context.Database.BeginTransaction())
{
try
{
context.Students.Add(new Student()
{
FirstName = "Rama2",
StandardId = standard.StandardId
});
context.SaveChanges();
context.Courses.Add(new Course() { CourseName = "Computer Science" });
context.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
Console.WriteLine("Error occurred.");
}
}
}
我希望它对你有用。
- 3 回答
- 0 关注
- 157 浏览
添加回答
举报