处理实体框架SaveChanges()异常进行清理

本文关键字:异常 实体 框架 SaveChanges 处理 | 更新日期: 2023-09-27 18:13:56

我有一个File Repository库,它处理将文件保存到服务器上。在保存物理文件的同时,还记录了一个数据库条目。

下面是insert方法。

public DataFile InsertFile(string fileName, byte[] fileBytes)
{
    File.WriteAllBytes(Path.Combine(FileRepPath, fileName), fileBytes);
    DataFile dataFile = NewDataFile(
        fileName,
        fileBytes.Length
    );
    try
    {
        using (MyEntities context = new MyEntities())
        {
            context.DataFiles.Add(dataFile);
            context.SaveChanges();
        }
    }
    catch (Exception)
    {
        File.Delete(Path.Combine(FileRepPath, fileName));
        throw;
    }
    return dataFile;
}

如果数据库更新失败,那么我想从服务器上删除该文件。我通过捕捉上下文操作中发生的任何异常并删除文件(并重新抛出错误,以便它可以弹出)来做到这一点。

这种做法正确吗?我应该捕捉更具体的异常吗?

处理实体框架SaveChanges()异常进行清理

我建议您使用TransactionScope对象为您管理此任务。每个实现IEnlistmentNotification接口的组件都可以参与TransactionScope的两阶段提交。

提交将需要申请MS-DTC的服务,但它将确保全部或不保存。MS-DTC用于协调跨多个异构资源的事务结果。

这里有几篇微软的文章:

  • 使用文件系统事务增强应用程序
  • 事务NTFS托管包装器