如果发生异常,SaveChanges会被处置吗?

时间:2017-08-24 14:00:14

标签: c# exception-handling entity-framework-6

请考虑以下代码:

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()执行的更改是否仍会传播到数据库?

1 个答案:

答案 0 :(得分:0)

如果您没有TransactionScope或类似内容,则会提交更改。

PS:不确定,但想想如果您使用EF Core,如果您有TransactionScope,它将提交DataBase事件。见https://github.com/aspnet/EntityFrameworkCore/issues/5595