EF 4.1 Как объединить граф, возвращаемый веб-сервисом, в существующий контекст - PullRequest
1 голос
/ 14 июня 2011

У меня есть сценарий, в котором мне нужно объединить большой граф (более 2000 объектов), возвращаемый веб-службой, в существующий DbContext. Итак, моя первая попытка:

    ' get new object from web service
    Dim newCust = DAL.GetCustomer(ActiveCustomerView.CustomerID)

    ' attach the object graph into existing context
    context.Customers.Attach(newCust)

Это создает повторяющиеся конфликты в случае, если я пытаюсь прикрепить объекты, содержащие сущности, которые уже существуют в контексте.

Чтобы избежать этой проблемы, я очищаю локальные данные и затем вызываю AcceptAllChanges перед присоединением:

        context.Orders.Local.Clear()
        context.OrderItems.Local.Clear()
        context.Messages.Local.Clear()
        context.Contacts.Local.Clear()
        context.Parcels.Local.Clear()
        context.CustomerTransactions.Local.Clear()
        context.ReturnedParcels.Local.Clear()
        context.ReturnedOrderItems.Local.Clear()
        context.InventoryItems.Local.Clear()
        context.Shippments.Local.Clear()
        context.Prints.Local.Clear()

        DirectCast(context, IObjectContextAdapter).ObjectContext().AcceptAllChanges()

Это работает, но производительность неприемлема, поскольку очистка данных занимает более 40 секунд.

Есть ли другой способ эффективно выполнить это? Могу ли я как-то распоряжаться инстагратом DbSet для их очистки?

Я не могу уничтожать и создавать новый контекст каждый раз, когда мне нужно прикрепить график, потому что он содержит другие объекты, которые могут быть потеряны.

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