簡體   English   中英

如果發生異常,是否會處理SaveChanges?

[英]Will SaveChanges be Disposed if an Exception Occurs?

請考慮以下代碼:

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類繼承自Entity Framework的DbContext 因此,在ComputeSalary()函數中,您將看到由於不允許零除而將引發異常。 這將導致代碼退出using塊,從而處理unitOfWork。 我的問題是,即使ComputeSalary()函數發生異常,由SaveChanges()執行的更改是否仍會傳播到數據庫?

如果您沒有TransactionScope之類的東西,那么更改將被提交。

PS:不確定,但是如果您使用EF Core,請考慮一下,如果您有TransactionScope,它將提交到DataBase事件。 參見https://github.com/aspnet/EntityFrameworkCore/issues/5595

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM