实体框架核心 - DbUpdateException

时间:2016-12-22 17:51:10

标签: entity-framework exception

更新:我有一段代码可以在不存在时创建记录,或者在它们存在时更新它们。但是,在尝试更新记录时,我得到了这个例外:

  

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()命令?

1 个答案:

答案 0 :(得分:0)

我设法以这种方式解决了这个问题:

var entry = context.Entry(entity);
entry.Reload();
删除失败的每个条目的