请考虑以下代码:
public class UnitOfWork
{
private readonly Context _context;
public IEmployeeRepository Employees { get; private set; }
public UnitOfWork(Context context)
{
_context = context;
Employees = new EmployeeRepository(_context);
}
public int SaveChanges()
{
return _context.SaveChanges();
}
}
public class Program
{
try
{
using (var unitOfWork = new UnitOfWork(new Context()))
{
var employee = unitOfWork.Employees.GetById(1);
employee.Name = "John";
unitOfWork.SaveChanges();
ComputeSalary(employee);
}
}
catch (Exception ex)
{
// Exception logic goes here...
}
private void ComputeSalary(Employee employee)
{
int x = 1/0; // This will throw an exception.
return;
}
}
在Context
类继承DbContext
实体框架。因此,在ComputeSalary()函数中,您将看到将抛出异常,因为不允许除零。这将导致代码退出 using 块,从而处理 unitOfWork。我的问题是,即使 ComputeSalary() 函数发生异常,由 SaveChanges() 执行的更改仍会传播到数据库吗?
如果您没有TransactionScope或类似的东西,则将提交更改。
PS:不确定,但想想如果你使用 EF Core,如果你有一个 TransactionScope,它会提交到 DataBase 事件。见https://github.com/aspnet/EntityFrameworkCore/issues/5595
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句