@MrLumusss

Как исправить ошибку «The ObjectContext instance has been disposed and can no longer be used for operations that require a connection»?

Добрый день. Имеется программа для инвентаризации. Открываю форму для поиска мат. ценностей и при нажатии на кнопку поиска выскакивает исключение "The ObjectContext instance has been disposed and can no longer be used for operations that require a connection". При этом этот же метод срабатывает нормально в другом блоке кода

Метод, выбрасывающий исключение:
public static void FillItemsList(MaterialListView lvItems, List<Item> items)
        {
            lvItems.Items.Clear();

            List<string[]> data = new List<string[]>();

            foreach (var item in items)
            {
                if (item.DeliveryDate is DateTime)
                {
                    data.Add(new[] {
                        item.id.ToString(),
                        item.Employee1.Name,
                        item.ItemType.Name,
                        item.Name,
                        item.Count.ToString(),
                        item.DateOfIssue.ToShortDateString(),
                        item.DeliveryDate.ToString().Substring(0, 10)
                    });
                }
                else
                {
                    data.Add(new[] {
                        item.id.ToString(),
                        item.Employee1.Name,
                        item.ItemType.Name,
                        item.Name,
                        item.Count.ToString(),
                        item.DateOfIssue.ToShortDateString(),
                        item.DeliveryDate.ToString()
                    });
                }
            }

            var listItems = data.Select(item => new ListViewItem(item)).ToArray();
            lvItems.Items.AddRange(listItems);
        }


Также методы, которые участвуют в обработке поиска:
public static List<Item> SearchItem(string name, string type, DateTime dateOfIssue, DateTime? deliveryDate, params int[] cheks)
        {
            using (var db = new InventContext())
            {
                var items = db.Item.ToList();

                foreach (int i in cheks)
                {
                    if (i == 1)
                        items = items.Where(item => item.Name.Contains(name)).ToList();

                    if (i == 2)
                        items = items.Where(item => item.ItemType.Name.Contains(type)).ToList();

                    if (i == 3)
                        items = items.Where(item => item.DateOfIssue == dateOfIssue).ToList();

                    if (i == 4)
                        items = items.Where(item => item.DeliveryDate == deliveryDate).ToList();
                }

                return items;     
            }
        }


Обработчик нажатия кнопки поиска:
int[] checks = GetCheckBoxStat();

            if (checks.Length > 0)
            {
                DateTime deliveryDate;
                bool testDeliveryDate = false;

                DateTime dateOfIssue = DateTime.Now;

                if (DateTime.TryParse(txtDeliveryDate.Text, out deliveryDate)) testDeliveryDate = true;
                DateTime.TryParse(txtDateOfIssue.Text, out dateOfIssue);


                if (testDeliveryDate)
                {
                    var items = SearchItem(txtName.Text, txtType.Text, dateOfIssue, deliveryDate, checks);
                    FillItemsList(lvItems, items);
                }
                    
                else
                {
                    var items = SearchItem(txtName.Text, txtType.Text, dateOfIssue, null, checks);
                    FillItemsList(lvItems, items);
                }
                    
            }
            else
            {
                MessageBox.Show("Выберите хотя бы одно условие поиска", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
Ну видимо где-то внутри item ссылался на ObjectContext. Вероятно, для ленивой загрузки.
А ты его задиспозил уже.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы