更新:我有一段代码可以在不存在时创建记录,或者在它们存在时更新它们。但是,在尝试更新记录时,我得到了这个例外:
Microsoft.EntityFrameworkCore.DbUpdateException DELETE语句 与REFERENCE约束冲突
public static string AddCurrencies(ApplicationDbContext db)
{
// ...
foreach (Currency c in db.Currency.ToList())
{
try
{
db.Remove(c); // the troublemaker!
db.SaveChanges();
}
catch
{
// probably in use (foreign key)
}
}
// ...
foreach (Currency c in CurrencyList)
{
var c_db = db.Currency.FirstOrDefault(x => x.Code == c.Code);
if (c_db == null)
{
// adding
db.Currency.Add(c);
}
else
{
// updating
c_db.Name = c.Name;
c_db.LocalDisplay = c.LocalDisplay;
}
db.SaveChanges(); // exception fired if updating!
}
// ...
}
经过一些调查,并且能够打开SQL调试后,我发现Remove()“仍然存在”,并且会在第二次调用SaveChanges()时重试,因此异常。现在问题重新阐述:如何“撤消”(缺少更好的表达式)失败的Remove()命令?
答案 0 :(得分:0)
我设法以这种方式解决了这个问题:
var entry = context.Entry(entity);
entry.Reload();
删除失败的每个条目的。