【问题标题】:Entity Framework Code First DBContext ObjectStateManager Error实体框架代码优先 DBContext ObjectStateManager 错误
【发布时间】:2011-07-16 05:54:26
【问题描述】:

我收到错误“An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.

public class TestObject
{
    public string Name {get;set;}
}


public EditTeamResponse Edit(TestObject testObject)
    {            
        if (!ValidateTestObject(testObject))
        {
            return testObject;
        }
        try
        {
            _unitOfWork.TestObjectRepository.Update(testObject);
            _unitOfWork.Commit();
        }
        catch (Exception)
        {
            //Error is thrown here
            _validationDictionary.AddError("Unknown", "Unknown Error!");
            return testObject;
        }
        // Other Extra Code
        return editTeamResponse;
    }

protected bool ValidateTestObject(TestObject testObject)
    {
        if (CheckIfNameChanged(teamToValidate))
        {
            if (_unitOfWork.TestObjectRepository.Any(x => x.Name == testObject.Name))
                _validationDictionary.AddError("Name", "Name already exist.");
        }
        return _validationDictionary.IsValid;
    }
private bool CheckIfNameChanged(TestObject testObject)
        {
            return _unitOfWork.TestObjectRepository.FindBy(testObject.TeamId).Name != testObject.Name;
        }

我知道当我调用 CheckIfNameChanged(TestObject testObject) 方法时,我向 ObjectContext 添加了一个实体键,当我调用 _unitOfWork.TestObjectRepository.Update(testObject) 时附加或编辑代码:

public void Update{
    _context.Entry(entity).State = EntityState.Modified;
}

这是发生冲突的地方,我在 ObjectStateManager 中有两个相同的实体键。有没有办法解决这个问题,而无需我去上下文分离实体,还是有其他方法?从上下文中分离实体的最佳方法是什么?

【问题讨论】:

    标签: ef-code-first dbcontext objectstatemanager


    【解决方案1】:

    您可以检查名称是否更改如下

    private bool CheckIfNameChanged(TestObject testObject)
    {
        return !_unitOfWork.TestObjectRepository
           .Any(x => x.TeamId == testObject.TeamId && x.Name == testObject.Name);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-02
      • 1970-01-01
      • 2011-05-09
      • 2014-04-03
      • 1970-01-01
      • 2017-09-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多