2011-09-22 40 views
0
Private WorkOrderServicesController As New WorkOrderServicesController 

Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAdd.Click 

      Dim _WorkOrderServices As New WorkOrderServices 
      _WorkOrderServices.Quantity = 1 
      _WorkOrderServices.ServiceID = 1 
      _WorkOrderServices.UnitCost = 10 
      _WorkOrderServices.CreatedBy = StateManager.UserID 
      _WorkOrderServices.CreatedDate = Now 

      lstWorkOrderServices.Add(_WorkOrderServices) 

      grdServices_Fill() 

    End Sub 
Protected Sub grdServices_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grdServices.RowCommand 
    If (e.CommandName.Equals("Delete")) Then 
     Dim ServiceID = e.CommandArgument 
     Dim _WorkOrderService = lstWorkOrderServices.Where(Function(os) os.ServiceID = ServiceID).SingleOrDefault 


     If Not _WorkOrderService Is Nothing Then 
      If _WorkOrderService.iWOServicesID > 0 Then 
       With _WorkOrderService 
        .Deleted = True 
        .DeletedBy = StateManager.UserID 
        .DeletedDate = Now 
       End With 

       WorkOrderServicesController.UpdateWorkOrderService(_WorkOrderService) 
      Else 
       lstWorkOrderServices.Remove(_WorkOrderService) 
      End If 

     End If 
    End If 
End Sub 

一旦我通過EntityObject通過用戶界面來DAL和嘗試更新實體,面帶錯誤 ** ** MyDAL.DLL一個實體對象不能被IEntityChangeTracker的多個實例引用?

Public Class WorkOrderServicesDAL 
    Private _context As LAITEntities 

    Public Sub New() 
     _context = New LAITEntities 
    End Sub 

    Function UpdateWorkOrderService(ByVal vWorkOrderService As WorkOrderServices) As Boolean 
     Try 
      'An entity object cannot be referenced by multiple instances of IEntityChangeTracker. 
      _context.WorkOrderServices.Attach(vWorkOrderService) 
      _context.ObjectStateManager.ChangeObjectState(vWorkOrderService, EntityState.Modified) 
      _context.SaveChanges() 
      Return True 
     Catch ex As Exception 
      Return False 
     End Try 
    End Function 

End Class 
「實體對象不能由多個實例引用」
+0

可能重複[如何擺脫「一個實體對象不能被IEntityChangeTracker的多個實例引用」?](http://stackoverflow.com/questions/620084/how-to-get-rid-off-一個實體對象不能被多個實例引用-O) –

回答

4

您可能在您的DAL中創建了一個ObjectContext,將返回的對象傳遞到您的UI中(此時用於檢索對象的ObjectContext超出了範圍),然後將對象傳回到您的DAL中,創建另一個ObjectContext並嘗試使用這個新的上下文保存您的更改。

你不能這樣做;您需要保留原始上下文,並重新使用它(可能通過對象上的實例成員)以保存更改,或者需要從第一個上下文實例中分離對象並將其重新附加到新的背景。有關附加和去附加的詳細信息,請參閱此link

+0

我試圖分離對象「_context.Detach(vWorkOrderService)」,但錯誤發生「對象無法分離,因爲它是不附加到ObjectStateManager「。 – arlen

+0

你能編輯你的問題來包含返回對象的代碼嗎? – CodingGorilla

+0

我通過如下代碼行初始化類:「Private WorkOrderServicesController As New WorkOrderServicesController」並執行選擇和更新,但沒有用於選擇和更新的類的不同實例,因此我認爲我沒有拖拽ObjectContexts。 – arlen

相關問題