2011-07-16 19 views
0

私はエラーを取得しています「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つの同じエンティティのキ​​ーを得ました。エンティティを切り離すためにコンテキストに行くことなくこの問題を解決する方法はありますか、それとも他の方法がありますか?コンテキストからエンティティを切り離す最善の方法は何ですか?

答えて

1

おかげで動作します

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

はい、次のように名前が変更された場合は、確認することができます – Ganator

関連する問題