错误:ObjectStateManager中已存在具有相同键的对象。 ObjectStateManager无法使用相同的键跟踪多个对象

时间:2014-01-05 00:36:50

标签: c# entity-framework

我是EF的初学者,正在研究其他一些代码。通用存储库类具有以下更新方法

public void Update(TEntity entity)
{
    if (entity.EntityState == EntityState.Detached)
    {
        objectSet.Attach(entity);
    }
    objectContext.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
}

public void CommitApplicationEntities()
{
    objectContext.SaveChanges();
}

这个方法叫做

public void UpdateSearchLog(SearchLog toUpdate)
{
    searchLogRepository.Update(toUpdate);
    searchLogRepository.CommitApplicationEntities();
}

修改SearchLog后,我调用了searchLogRepository.Update(toUpdate),但收到此错误

“ObjectStateManager中已存在具有相同键的对象.ObjectStateManager无法使用相同的键跟踪多个对象。”

通过做一些搜索我知道错误是由于我首先查询现有数据,然后附加修改后的实体,但我们如何更新此更新方法,以便它不会中断代码中的任何其他调用?

由于

1 个答案:

答案 0 :(得分:0)

您可以尝试两种方法:

  1. 查询现有数据后,在附加修改后的对象
  2. 之前分离该对象
  3. 如果查询现有数据返回记录,请使用分离对象中的值更新该记录,然后保存更改。