На объектный объект нельзя ссылаться несколькими экземплярами IEntityChangeTracker? - PullRequest
0 голосов
/ 22 сентября 2011
   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 через UI в DAL и пытаюсь обновить Entity, сталкиваюсь с ошибкой "объект сущности не может ссылаться несколькими экземплярами" ** MyDAL.DLL **

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

1 Ответ

4 голосов
/ 22 сентября 2011

Вы, вероятно, создаете ObjectContext в своем DAL, передаете возвращенный объект в свой пользовательский интерфейс (после чего ObjectContext, который вы использовали для извлечения объекта, выходит из области видимости), а затем передаете объект обратноваш DAL, в котором вы создаете другой ObjectContext и пытаетесь сохранить свои изменения в этом новом контексте.

Вы не можете этого сделать;вам либо нужно сохранить исходный контекст и повторно использовать его (возможно, через член экземпляра на вашем объекте), чтобы сохранить изменения обратно, либо вам нужно отсоединить объект от первого экземпляра контекста и повторно присоединить его кновый контекст.См. ссылку для получения подробной информации о присоединении и отсоединении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...