Добрый день. Имеется программа для инвентаризации. Открываю форму для поиска мат. ценностей и при нажатии на кнопку поиска выскакивает исключение "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);
}