我们设置中的某些对象具有唯一索引,这些索引通过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的系统,因此我无法真正停止每次获取的对象的新副本。而且我相信我可以通过获取上下文的新副本来解决此问题,而不必每次都尝试放弃所做的更改,但是我宁愿不走那条路。
还有另一种方法可以解决这种情况吗?