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

、エラーと顔 ** MyDAL.DLL **IEntityChangeTrackerの複数のインスタンスでエンティティオブジェクトを参照することはできませんか?私はDALのUIを通じてEntityObjectを渡すとエンティティを更新しようとしたら

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-エンティティオブジェクトは複数インスタンスでは参照できません-0) –

答えて

4

DALにおそらくObjectContextを作成し、返されたオブジェクトをUIに渡しています(その時点でObjectContextが範囲外になっているオブジェクトを取得するために使用しました)。そしてオブジェクトをDALに戻します。 もう1つObjectContextこの新しいコンテキストで変更を保存しようとします。

これはできません。元のコンテキストを維持し、変更を保存するために(おそらくオブジェクト上のインスタンスメンバを介して)再利用するか、最初のコンテキストインスタンスからオブジェクトを切り離してオブジェクトに再度接続する必要があります新しい文脈。取り付けおよび取り外しの詳細については、linkを参照してください。

+0

オブジェクト「_context.Detach(vWorkOrderService)」をデタッチしようとしましたが、エラーが発生しました。「オブジェクトはデタッチできません。 ObjectStateManagerには接続されていません。 – arlen

+0

質問を編集してオブジェクトを返すコードを含めることはできますか? – CodingGorilla

+0

次のようにコードラインでクラスを初期化します。「Private WorkOrderServicesController As New WorkOrderServicesController」を選択して更新します。選択と更新のクラスのインスタンスが異なるため、ObjectContextを持たないと思います。 – arlen

関連する問題

 関連する問題