[英]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.