EF 4.0 - Созданы два разных новых экземпляра ObjectContext, но они имеют одну и ту же ссылку - PullRequest
0 голосов
/ 24 ноября 2011

Моя модель реализована в собственной DLL, где также находится сгенерированный App.config.Само приложение «не имеет» App.config.Контекст не был инициализирован (прямой доступ только в DLL).И я получаю сообщение об ошибке, которое было решено путем копирования строки подключения в новое приложение, созданное вручную App.config.

Этот случай был для меня немного излишним, и я решил получить EntityConnection, написав егосебя.Теперь проблемный код, который работает с избыточной версией, а не в собственной реализации.

public Discount GetDiscountByOffer(int discountId)
{
    // Own implementation, redundant one without passed connection parameter
    using (context2 = new SalesEntities(Configuration.EntityConnection))
    {
        return context2.Discounts.Single(d => d.ID == discountId);
    }
}

В другом классе я вызываю этот метод и назначаю его клиенту.Также здесь я делаю новый контекст.Упрощенный код:

    // Own implementation, redundant one without passed connection parameter
    using (context1 = new SalesEntities(Configuration.EntityConnection))
    {
        var customer = GetCustomer(10004);
        customer.ActualDiscount = GetDiscountByOffer(5); // here is the call and 
                                                         // the error
    }

Ошибка показывает, что ObjectContext (context1) был закрыт, чего я не понимаю.Как контекст2 связан с контекстом1?Могу поспорить, что оба имеют одну и ту же ссылку, но это не логично для меня.EntityConnection также инициализируется новым каждый раз, когда я передаю параметр.

В избыточной версии этот код работает.

1 Ответ

0 голосов
/ 24 ноября 2011

Получить объект из context2, прикрепить его к context1, затем установить свойство клиента.

Объяснение MSDN:

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.attach.aspx

Читать 'Проблемы работыс несколькими экземплярами ObjectContext ниже:

http://dotnetslackers.com/articles/ado_net/Managing-Entity-Framework-ObjectContext-lifespan-and-scope-in-n-layered-ASP-NET-applications.aspx#the-problems-of-working-with-multiple-objectcontext-instances

...