我有一个带EF的MVC网络应用程序(代码优先)。
在我的“导入”功能中,我想在我的数据库中添加一个项目列表(带有DbSets的DbContext项目)。
使用“foreach”循环,我尝试将每个项目添加到DB并保存。
public static void AddItem(Item item)
{
ItemService.AddItem(item);
UOW.Commit();
}
和 -
//UOW
public void Commit()
{
m_context.SaveChanges();
}
由于数据库中可能已存在某些项目,因此我将“AddItem”放在“try-catch”块中,因此如果无法添加项目,它将继续到下一项。
问题是,只要数据库中的项目不,它就能正常运行。如果有一个项目已经存在 - 我收到一个错误,它无法添加重复的密钥,而且我收到所有下一个项目的错误(也是DB中不存在的项目) )!
答案 0 :(得分:0)
当你到达下一个Commit时,你的上下文是否仍然相同?因为那时你新添加的项目仍然存在(它从未在下一次提交时被删除)并再次失败。
如果您的导入功能没有在多个线程中运行,一个简单的解决方案可能是在将数据实际添加到您的上下文之前检查数据库中是否已存在要添加的项目。