这样做可以接受吗?首先尝试添加实体。如果添加失败,也没关系,因为这意味着该实体已经存在?

或者有更优雅/简单的解决方案吗?

EntityFrameworkEntities dal = EntityDataModelHelper.GetEntityDataModel();

try
{
    dal.AddToXXXXXX(xxxxxxx);
}
catch
{

}

try
{
    dal.SaveChanges();
    return true;
}
catch
{
    return false;
}

好吧,我把它缩短为...

EntityFrameworkEntities dal = EntityDataModelHelper.GetEntityDataModel();

if(xxxxxxx.ID == 0)
{
    dal.AddToXXXXXX(xxxxxxx);
}

try
{
    dal.SaveChanges();
    return true;
}
catch
{
    return false;
}
有帮助吗?

解决方案

这当然是不会确定这样做。在C#中没有类型catch语句的意思是“捕捉任何标准或非标准的例外”。但你的意图是为了防止重复添加。再添失败有多种这并不表明现有项目的原因。例如,该方法可以抛出一个空引用和你假设它加入。

如果您想检查重复添加,您必须在抛出一个重复添加只捕获异常。

其他提示

您想与IfExists样式的方法来开始,然后跳过保存更改,除非你确实有变化。

正如卢卡斯指出,的try-catch块有一个大的开销,如果你掉进catch块,所以一般你不想依赖,除非有确定的项目已经存在的没有可能的方式。

不要使用一个try-catch做一个if语句的工作。的try-catch为不寻常的意外事件。

修改 在你更新后的代码,你没有赶上,将通过“AddToXXXXXX”方法抛出的异常。

您应该做的。

If(!XXXXXX.Contains(newItemValue))
{
   try
   {
      add...
      savechanges...
   }
   catch
   {

   }
}

另外,你可以单独拿出来添加和调用SaveChanges成不同的try-catch块,但如果添加时的SaveChanges失败甚至被执行的才是必需的。

您可以用 If 语句替换第一个 Try-Catch,但我认为您仍然需要第二个。

编辑: 也不建议只捕获一个块中的所有异常,而不考虑它们是什么。

附:Try Catch 块比 If 语句使用更多的处理能力(时间)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top