首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架代码优先DBContext ObjectStateManager错误

实体框架代码优先DBContext ObjectStateManager错误
EN

Stack Overflow用户
提问于 2011-07-16 13:54:27
回答 1查看 2.7K关注 0票数 0

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

代码语言:javascript
复制
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):时,我附加或编辑了代码

代码语言:javascript
复制
public void Update{
    _context.Entry(entity).State = EntityState.Modified;
}

这就是冲突发生的地方,我在ObjectStateManager中得到了两个相同的实体键。有没有一种方法可以解决这个问题,而不需要我去上下文中分离实体,或者还有其他方法?将实体从上下文中分离出来的最佳方式是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-16 14:14:22

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

代码语言:javascript
复制
private bool CheckIfNameChanged(TestObject testObject)
{
    return !_unitOfWork.TestObjectRepository
       .Any(x => x.TeamId == testObject.TeamId && x.Name == testObject.Name);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6715654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档