2011-09-22 72 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

相关问题