请考虑以下代码:
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()函数中,您将看到将抛出异常,因为不允许除零。这将导致代码退出使用块,从而处理unitOfWork。我的问题是,即使ComputeSalary()函数中发生异常,SaveChanges()执行的更改是否仍会传播到数据库?
答案 0 :(得分:0)
如果您没有TransactionScope或类似内容,则会提交更改。
PS:不确定,但想想如果您使用EF Core,如果您有TransactionScope,它将提交DataBase事件。见https://github.com/aspnet/EntityFrameworkCore/issues/5595