我正在开发一个系统,将从另一个系统获取大量的数据。我使用EF Core 3.0将这些数据分批插入。我正在寻找一种方法来继续执行其他语句,即使有/有异常的语句。例如:如果我在数据库中插入10条记录,记录号3有一个错误,EF Core应该阻止它保存,但继续尝试保存剩余的7条记录。
我尝试过的事情:
拦截器
我找不到让系统继续运行CommandFailed
功能的方法。
与其使用拦截器,不如考虑批量运行更新,这样会删除无效条目并重新保存。
对于每个"batch"要保存的记录:
bool isSaved = false;
do
{
try
{
await context.SaveChangesAsync();
isSaved = true;
}
catch (DbUpdateException ex)
{
foreach (var entry in ex.Entries)
entry.State = EntityState.Detached; // Remove from context so won't try saving again.
}
}
while (!isSaved);
原文来源:http://andreyzavadskiy.com/2016/09/22/ignoring-dbupdateexception-and-continue/