在EF

2013-02-06 84 views
0

重複鍵異常下面是簡單的代碼使用EF在EF

var isNewEntity = entity.Id == 0; 

     if (isNewEntity) 
     { 
      _unitOfWork.Context.DbTripReportDefinitionSectionSet.Add(entity); 
     } 
     else 
     { 
      ObjectStateEntry stateEntry; 
      _unitOfWork.ObjectStateManager.TryGetObjectStateEntry(entity, out stateEntry); 

      if (stateEntry == null) 
      { 
       _unitOfWork.Context.DbTripReportDefinitionSectionSet.Attach(entity); 
      } 

      _unitOfWork.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified); 
     } 

     _unitOfWork.Save(); 

     return entity.Id; 

問題是我有一個例外

「使用相同的密鑰對象已存在新的實體添加到SQL Server在ObjectStateManager中。 的ObjectStateManager不能用相同的 重點跟蹤多個對象「。已存在但未追蹤的實體。

所以_unitOfWork.ObjectStateManager.TryGetObjectStateEntry(entity, out stateEntry);返回FALSE,該代碼_unitOfWork.Context.DbTripReportDefinitionSectionSet.Attach(entity);拋出異常。我猜是因爲已經附加的導航屬性。我如何附加這些實體沒有導航屬性?或者,如何解決以另一種方式,這些問題呢?

回答

0

沒有進一步的信息,我可能會建議你創建一個新的Context實例。

最可能的是你對導航性能的假設是正確的;但是,而不是試圖修復代碼,它是更好地爲您創建一個新的context除非有需要在同一事務被提交(我假設你是用人工作模式的單位)操作。