我正在进行大约50个左右记录的批量插入。它添加了所有记录和trys,以便一次性保存它们。
foreach(var item in MyItemsToSave)
{
context.MyItems.Add(item);
}
context.SaveChantes();
如果失败,我想逐个添加它们。我有一些其他逻辑来处理失败,但我不想丢失49条有效记录,因为一个失败。我尝试了以下代码:
foreach(var item in MyItemsToSave)
{
context.MyItems.Add(item);
try{
context.SaveChanges();
}
catch(Exception e)
{
.......do something
}
}
这两段代码都在同一个进程中运行。第一部分作为最佳情况运行,然后第二部分运行,如果第一部分代码失败。我确定的是代码的批处理部分中的项目仍在等待插入。因此,当我调用savechanges方法时,它仍然试图保存坏记录。
如何删除失败的记录(或所有记录并重新开始)?
编辑说明: 即使第二次出现它仍然会失败,因为一旦错误的记录进入列表,它将尝试在您尝试循环的下一次迭代时插入它。
答案 0 :(得分:0)
最好一个一个地保存更改。
foreach(var item in MyItemsToSave)
{
try{
context.MyItems.Add(item);
context.SaveChanges();
}
catch(Exception e)
{
while (item.<FKColl>.Count > 0)
{
context.Detach(item.<FKColl>.First());
}
context.Detach(item);
}
}
如果有任何失败,请使用Detach
从上下文中删除该项目(NOT IN DATASOURCE)。您还应该在分离item