0

我有一个带有 EF 的 MVC Web 应用程序(代码优先)。

在我的“导入”函数中,我想将项目列表添加到我的数据库中(带有 DbSets 的 DbContext 项目)。

使用“foreach”循环,我尝试将每个项目添加到数据库并保存。

    public static void AddItem(Item item)
        {
            ItemService.AddItem(item);
            UOW.Commit();
        }

和 -

  //UOW
  public void Commit()
        {
            m_context.SaveChanges();
        }

由于数据库中可能已经存在一些项目,我将“AddItem”放在“try-catch”块中,所以如果它无法添加项目 - 它将继续到下一个项目。

问题是只要项目不在数据库中,它就可以很好地工作。如果有一个项目已经存在 - 我得到一个错误,它不能添加一个重复的键,然后我得到这个错误的所有下一个项目(也是数据库中不存在的项目)!

4

1 回答 1

0

会不会是当你进入下一个 Commit 时你的上下文还是一样的?因为那时您新添加的项目在下一次提交时仍然存在(毕竟它从未被删除)并再次失败。

如果您的导入功能没有在多个线程中运行,一个简单的解决方案可能是在实际将其添加到您的上下文之前检查要添加的项目是否已经存在于您的数据库中。

于 2013-05-29T13:46:59.380 回答