none
Экземпляр ObjectContext был удален и больше не может использоваться в операциях, требующих соединения RRS feed

  • Вопрос

  • Как с такой ошибкой бороться? 

    Периодически вылетает здесь

    [XmlIgnoreAttribute()]
            [SoapIgnoreAttribute()]
            [DataMemberAttribute()]
            [EdmRelationshipNavigationPropertyAttribute("Model", "FK_PlacementsInOrders2_Orders2Changeset", "PlacementsInOrders2")]
            public EntityCollection<PlacementsInOrders2> PlacementsInOrders2
            {
                get
                {
                    return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<PlacementsInOrders2>("Model.FK_PlacementsInOrders2_Orders2Changeset", "PlacementsInOrders2");
                }
                set
                {
                    if ((value != null))
                    {
                        ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<PlacementsInOrders2>("Model.FK_PlacementsInOrders2_Orders2Changeset", "PlacementsInOrders2", value);
                    }
                }
            }

    5 июля 2012 г. 13:26

Ответы

  • Ошибка говорит о том, что где-то в Вашем коде происходит попытка получения данных из базы при уничтоженном ObjectContext. Такая ошибка может быть вызывана кодом ниже:

    public IEnumerable<User> GetUsers()
    {
        using (SampleDbEntities entities = new SampleDbEntities())
        {
            var query = from u in entities .Users select u;
            IEnumerable<User> users= query;
            return users;
        }         
    }

    В примере выше попытка запроса в базу будет произведена при вызове метода GetEnumerator() у возвращаемого методом перечисления, но к этому времени конструкция using уничтожит Object Context.

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

    public IEnumerable<User> GetUsers()

    { using (SampleDbEntities entities = new SampleDbEntities()) { var query = from u in entities .Users select u; IEnumerable<User> users= query.ToList();//Произойдет запрос в базу данных return users; } }




    • Изменено Alexander Kichkailo 5 июля 2012 г. 16:34
    • Предложено в качестве ответа PashaPash 5 июля 2012 г. 17:36
    • Помечено в качестве ответа Sergey Rogachev 6 июля 2012 г. 5:18
    5 июля 2012 г. 16:24
  • Вот статья на английском с описанием причин возникновения этой ошибки, а также лекарства по каждому пункту.

    Т.к. проблема у Вас вопроизводится периодически, то смотрите пункт 3.



    5 июля 2012 г. 16:39

Все ответы

  • Сказать что-либо по непонятному куску кода сложно, а гадать ещё сложнее. Если можно, дайте более развёрнутый вопрос.
    5 июля 2012 г. 13:30
    Модератор
  • Ошибка говорит о том, что где-то в Вашем коде происходит попытка получения данных из базы при уничтоженном ObjectContext. Такая ошибка может быть вызывана кодом ниже:

    public IEnumerable<User> GetUsers()
    {
        using (SampleDbEntities entities = new SampleDbEntities())
        {
            var query = from u in entities .Users select u;
            IEnumerable<User> users= query;
            return users;
        }         
    }

    В примере выше попытка запроса в базу будет произведена при вызове метода GetEnumerator() у возвращаемого методом перечисления, но к этому времени конструкция using уничтожит Object Context.

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

    public IEnumerable<User> GetUsers()

    { using (SampleDbEntities entities = new SampleDbEntities()) { var query = from u in entities .Users select u; IEnumerable<User> users= query.ToList();//Произойдет запрос в базу данных return users; } }




    • Изменено Alexander Kichkailo 5 июля 2012 г. 16:34
    • Предложено в качестве ответа PashaPash 5 июля 2012 г. 17:36
    • Помечено в качестве ответа Sergey Rogachev 6 июля 2012 г. 5:18
    5 июля 2012 г. 16:24
  • Вот статья на английском с описанием причин возникновения этой ошибки, а также лекарства по каждому пункту.

    Т.к. проблема у Вас вопроизводится периодически, то смотрите пункт 3.



    5 июля 2012 г. 16:39
  • Уважаемый пользователь не бросайте топик без ответа. Отпишитесь, если проблема решена не забудьте отметить ответ, если нет будем разбираться дальше.
    5 июля 2012 г. 18:53
    Модератор
  • Более подробно, вылетает при выполнении get. 

    Alexander Kichkailo, на статью натыкался

    Немного видоизменил код, ошибка ушла.