私はエラーを取得しています「An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
」Entity FrameworkのコードファーストDBContext ObjectStateManagerはエラー
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に2つの同じエンティティのキーを得ました。エンティティを切り離すためにコンテキストに行くことなくこの問題を解決する方法はありますか、それとも他の方法がありますか?コンテキストからエンティティを切り離す最善の方法は何ですか?
はい、次のように名前が変更された場合は、確認することができます – Ganator