即使状态为Detached,也会出现相同跟踪Id的异常

时间:2017-12-14 09:58:22

标签: c# entity-framework

在附加实体之前,我会检查其状态:

if (_context.Entry(item).State == EntityState.Detached) 
    _context.Entry(item).State = EntityState.Modified;

但无论如何它会引发以下异常:

  

附加类型'订单'的实体失败,因为同一类型的另一个实体已具有相同的主键值。使用'附加'方法或将实体的状态设置为“未更改”#39;或者'修改'如果图中的任何实体具有冲突的键值。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,请使用'添加'方法或“添加”#39;实体状态跟踪图形,然后将非新实体的状态设置为“未更改”。或者'修改'酌情。

我不完全理解这个消息。 该项目已存在,我使用AsNoTracking()查询检索它:

public Order GetOrder(int year, int number)
{
    try
    {
        _context.Orders.AsNoTracking().Single(x => x.Year == year && x.Number == number);
    }
    catch (Exception e)
    {
        return null;
    }
}

所以,如果没有跟踪(并且分离状态确认了),为什么我不能附加它来更新值?

0 个答案:

没有答案