如何在不进行上下文刷新的情况下处理Entity Framework对象中的错误

时间:2018-10-03 13:34:01

标签: entity-framework entity-framework-core

我们设置中的某些对象具有唯一索引,这些索引通过try catch块在后端进行了验证,以查看保存是否起作用。

try
{
    await context.MyUniqueEntity.AddAsync(myUniqueEntity);
    var rows = await context.SaveChangesAsync();

    return rows > 0 ? myUniqueEntity : null;
}
catch (DbUpdateException ex)
{
    context.Entry(myUniqueEntity).State = EntityState.Detached;
    throw new Exception("You must provide a unique name", ex.InnerException);
}

如上所述,这适合将主题添加到系统。但是,在进行更新时,catch块看起来像这样:

context.Entry(myUniqueEntity).State = EntityState.Unchanged;
throw new Exception("You must provide a unique name", ex.InnerException);

这也很好-一次。如果用户连续两次遇到相同对象的相同问题,则会发生这种情况:

  

无法跟踪实体类型'MyUniqueEntity'的实例,因为已经跟踪了另一个具有相同键值的{'Id'}实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。

这是一个基于Web的系统,因此我无法真正停止每次获取的对象的新副本。而且我相信我可以通过获取上下文的新副本来解决此问题,而不必每次都尝试放弃所做的更改,但是我宁愿不走那条路。

还有另一种方法可以解决这种情况吗?

0 个答案:

没有答案