Не удается получить доступ к связанным данным после удаления DataContext в Linq для SQL

Переформулировал мой вопрос, старый текст ниже

Поскольку я все еще надеюсь на ответ, я хотел бы повторить свой вопрос. Изображение У меня есть графический интерфейс с двумя списками, один из которых показывает список всех записей в базе данныхtblOrders и еще один, который показывает элементы в каждом заказе.

Я могу использовать Linq2sql или EF для получения всех заказов из базы данных, например так:

using (DataClasses1DataContext DataContext = new DataClasses1DataContext())
    ListOfOrders = DataContext.tblOrder.ToList();

Я могу отобразить этот порядок в списке илиdatagridview, Затем при выборе одного из заданий я хочу получить доступ к коллекции объектов из таблицыtblItems, Я могу сделать это так:

ListOfOrders.First().tblItems.toList();

За исключением того, что я не могу, потому что мне нужноDataContext который был утилизирован. В каком-то смысле это имеет смысл, поскольку я не могу гарантировать, что с этого заказа не было добавлено ни одного нового элемента, так как я получилListOfOrders. So ideally I would like to check if there has been an addition to a tblOrder.tblItems коллекцию и только заново получить эту коллекцию с сервера, если требуется.

На заднем плане моя модель немного сложнее: она состоит из заказов, которые состоят из частей, которые состоят из задач. Таким образом, чтобы оценить ход выполнения каждого заказа, мне нужно получить все части, которые принадлежат заказу, и для каждого из них я должен увидеть, сколько задач было выполнено. В базе данных с 200 заданиями, каждая из которых содержит от 1 до 10 частей, это просто замедляет мою программу с точки зрения отзывчивости ...

Может кто-нибудь мне помочь?

Оригинальный вопрос

Я нашел много вопросов, касающихсяDataContext, но я еще не нашел решение своей проблемы. Если я сделаю следующее:

using (DataClasses1DataContext DataContext = new DataClasses1DataContext())
    ListOfOrders = DataContext.tblOrder.ToList();

Это дает мне список объектов вtblOrder Таблица. Но теперь я хочу сделать это:

DataTable Orders = new DataTable();
Orders.Columns.Add("Order-ID", typeof(int));
Orders.Columns.Add("Order-Name", typeof(string));
Orders.Columns.Add("Order-Items", typeof(string));

dataGridView1.DataSource = Orders;

foreach (tblOrder Order in ListOfOrders)
{
    var newRow = Orders.NewRow();
    newRow["Order-ID"] = Order.orderID;
    newRow["Order-Name"] = Order.orderName;
    newRow["Order-Items"] = string.Join(", ", Order.tblItem.Select(item=> item.itemName).ToList());
        // System.ObjectDisposedException
    (dataGridView1.DataSource as DataTable).Rows.Add(newRow);
}

И я не могу, потому что доступ ко всем сущностям вtblItem Таблица, связанная с заказами по внешнему ключу, похоже, не сохраняется.

Что работает:

DataClasses1DataContext DataContext = new DataClasses1DataContext();
ListOfOrders = DataContext.tblOrder.ToList();

DataTable Orders = new DataTable();
Orders.Columns.Add("Order-ID", typeof(int));
Orders.Columns.Add("Order-Name", typeof(string));
Orders.Columns.Add("Order-Items", typeof(string));

dataGridView1.DataSource = Orders;

foreach (tblOrder Order in ListOfOrders)
{
    var newRow = Orders.NewRow();
    newRow["Order-ID"] = Order.orderID;
    newRow["Order-Name"] = Order.orderName;
    newRow["Order-Items"] = string.Join(", ", Order.tblItem.Select(item=> item.itemName).ToList()); 
    (dataGridView1.DataSource as DataTable).Rows.Add(newRow);
}

DataContext.Dispose();

Но, как я понимаю, это не желательно.

РЕДАКТИРОВАТЬ

Я расширил свой пример в Controller-View-Pattern.

using System.Collections.Generic;
using System.Linq;

namespace TestApplication
{
    class Controller
    {
        private List<tblOrder> _orders;
        public IList<tblOrder> Orders
        {
            get
            {
                return _orders;
            }
        }

        public Controller()
        {
            using (var DataContext = new DataClasses1DataContext())
            {
                _orders = DataContext.tblOrder.ToList();
            }
        }
    }
}

И представление теперь получает Заказы от контроллера:

using System.Data;
using System.Linq;
using System.Windows.Forms;

namespace TestApplication
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            Controller controller = new Controller();

            DataTable Orders = new DataTable();
            Orders.Columns.Add("Order-ID", typeof(int));
            Orders.Columns.Add("Order-Name", typeof(string));
            Orders.Columns.Add("Order-Items", typeof(string));

            dataGridView1.DataSource = Orders;

            foreach (tblOrder Order in controller.Orders)
            {
                var newRow = Orders.NewRow();
                newRow["Order-ID"] = Order.orderID;
                newRow["Order-Name"] = Order.orderName;
                newRow["Order-Items"] = string.Join(", ", Order.tblItem.Select(item=> item.itemName).ToList());
                (dataGridView1.DataSource as DataTable).Rows.Add(newRow);
            }
        }
    }
}

К сожалению, проблема остается той же ...

Ответы на вопрос(4)

Ваш ответ на вопрос