我收到一个错误"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中得到了两个相同的实体键。有没有一种方法可以解决这个问题,而不需要我去上下文中分离实体,或者还有其他方法?将实体从上下文中分离出来的最佳方式是什么?
发布于 2011-07-16 14:14:22
您可以检查名称是否更改,如下所示
private bool CheckIfNameChanged(TestObject testObject)
{
return !_unitOfWork.TestObjectRepository
.Any(x => x.TeamId == testObject.TeamId && x.Name == testObject.Name);
}https://stackoverflow.com/questions/6715654
复制相似问题