2

我正在使用,我需要在我的方法ADO.NET EF中实现某种自定义回滚。Save()逻辑是这样的

  • 我有一个调用OpenFileDialog的第一步Save()是检查是否有选定的图像以及是否有将选定的图像复制到新位置。
  • 然后我设置实体的属性,包括图片名称(这是我选择首先复制图像的原因)并使用此方法检查是否没有重复唯一值:HasDuplicatingEntity(entity)
  • 如果复制过程顺利并且没有具有相同唯一值的实体,那么我保存实体本身:Save(entity)
  • 如果出现问题,Save(entity)我只需要删除以前复制的图像(如果有的话),就是这样。

实际的实现是这样的:

try
{
  SaveImage();
  if(HasDuplicatingEntity(entity))
  {  
    //Show message to the user
    return false;
  }
  Save(entity);
}
catch
{
  //Log the exception and show message
  //Delete the image if there is such
}

出现的问题是,如果我尝试使用所选图像保存新实体但HasDuplicatingEntity(entity)返回 true。然后使用当前的逻辑,我只是​​向用户显示已经有一个具有相同唯一值的实体,然后只返回 false,在选择图像然后复制的情况下,我的文件系统中会留下一个未使用的图像.

这引出了我的确切问题。我有一个方法可以在出现问题时删除图像,但它在catch子句中被调用。现在,当我看到在另一个地方可能需要删除图像时,我看到了两个选项 - 只需从以下位置调用该方法if

if(HasDuplicatingEntity(entity))
      {  
        //Show message to the user
        //Delete Image
        return false;
      }

这有点合乎逻辑,但除了方法调用之外,我有一些检查以确定是否确实存在复制的图像,因为图像不是必需的,这将导致几行重复代码。另一种选择是抛出异常并转到catch我已经处理此问题的子句,但这意味着更改当前管理此情况的方式。这个确切的部分:

if(HasDuplicatingEntity(entity))
      {  
        //Show message to the user
        return false;
      }

是继承的,我没有太多经验,所以我不想把好事变成坏事,所以我想知道哪种方法是处理这个问题的正确方法。

4

0 回答 0