2015-06-22 104 views
-2

我試圖實現下面的代碼,但我不斷收到以下錯誤。在ObjectStateManager中已存在具有相同密鑰的對象

ObjectStateManager中已存在具有相同鍵的對象。現有對象處於「未更改」狀態。如果對象處於添加狀態,則只能將其添加到ObjectStateManager。

 Function Create(lkmeasure As LkMeasure, ByVal oForm As FormCollection) As ActionResult 
     Dim ObjectiveList As New List(Of String) 
     Try 
      If ModelState.IsValid Then 

       If Not DirectCast(Session("LoggedInUser"), SecurityUser).SecurityRole.RoleName.ToLower.Equals(cCommon.UserRole.Administrator.ToString.ToLower()) Then 
        lkmeasure.AgencyID = DirectCast(Session("LoggedInUser"), SecurityUser).AgencyID 
       End If 

       lkmeasure.StatusID = Convert.ToInt16(oForm("MeasureStatus").ToString()) 

       If Not oForm("PerformanceObjectives") Is Nothing AndAlso oForm("PerformanceObjectives").Length > 0 Then 
        'If Convert.ToInt16(oForm("PerformanceObjectives").ToString()).Equals(0) Then 
        ' lkmeasure.ObjectiveID = 0 
        'Else 
        'lkmeasure.ObjectiveID = Convert.ToInt16(oForm("PerformanceObjectives").ToString()) 
        ObjectiveList = oForm("PerformanceObjectives").ToString().Split(",").ToList() 
        'End If 
       End If 
       lkmeasure.MeasureCreateDate = DateTime.Now 
       lkmeasure.MeasureUpdateDate = DateTime.Now 
       'Dim lkMeasureObjList As New List(Of LkMeasure) 

       For Each obj In ObjectiveList 
        Dim lkmeasureobj As New LkMeasure 
        lkmeasureobj = lkmeasure 
        lkmeasureobj.MeasureCreateDate = DateTime.Now 
        lkmeasureobj.MeasureUpdateDate = DateTime.Now 
        lkmeasureobj.ObjectiveID = Convert.ToInt16(obj) 
        db.LkMeasures.AddObject(lkmeasureobj) 
        db.SaveChanges() 
        lkmeasureobj = Nothing 
       Next 


       Return RedirectToAction("Index") 
      End If 

      Call CreateViewBag() 
      Return View(lkmeasure) 
     Catch ex As Exception 

      Return Nothing 
     End Try 


    End Function 

我做了什麼對象,但仍然它說對象添加。

+0

這意味着,在你的DbContext存在具有相同鍵另一個實體。哪個屬性是你的鑰匙? –

+0

lkmeasure對象中有一個measureid,它是關鍵 – ConstantLearner

+0

如何初始化MeasureID?數據庫中的身份字段是什麼?你在第一個循環中出現這個錯誤?第二... ? –

回答

0

如果你想在ObjectiveList添加新LkMeasure每個值,那麼你可以試試下面的:

For Each obj In ObjectiveList 
    Dim lkmeasureobj As New LkMeasure 
    ' Copy values from your "prototype" lkmeasure instance 
    lkmeasureobj.AgencyID = lkmeasure.AgencyID 
    lkmeasureobj.StatusID = lkmeasure.StatusID 
    lkmeasureobj.MeasureCreateDate = DateTime.Now 
    lkmeasureobj.MeasureUpdateDate = DateTime.Now 
    lkmeasureobj.ObjectiveID = Convert.ToInt16(obj) 
    db.LkMeasures.AddObject(lkmeasureobj) 
Next 
' Only save once, outside of the loop 
db.SaveChanges() 
+0

謝謝,這工作 – ConstantLearner

相關問題