0

我有一个文件存储库,用于处理将文件保存到服务器上。除了保存物理文件,还记录了一个数据库条目

下面是插入方法。

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;
}

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

这是正确的做法吗?我应该捕捉更具体的例外吗?

4

1 回答 1

1

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

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

以下是几篇微软文章:

于 2013-05-17T08:52:31.317 回答