Поделиться через


Привязка данных Adventure Works (образец приложения модели EDM)

Образец приложения привязки данных AdventureWorks демонстрирует привязку данных с использованием платформы Entity Framework. Модель данных определена в разделе Модель AdventureWorks Sales (модель EDM). Это приложение отображает и изменяет сущности SalesOrderDetail, ассоциированные с сущностями SalesOrderHeader. На следующей иллюстрации показано диалоговое окно, используемое для добавления сущности SalesOrderDetail к сущности SalesOrderHeader, а фоном служит основная форма приложения.

Adventureworks SalesModel DataBinding EDM

Привязка данных на платформе Entity Framework

Для обеспечения привязки данных ObjectQuery к элементу управления DataGridView в форме Windows достаточно ввести всего лишь несколько строк кода. Вначале создайте запрос ObjectQuery. Затем присвойте значение ObjectQuery свойству DataSource элемента управления DataGridView.

В следующем коде присваивается единственное значение SalesOrderHeader из значений ObjectQuery, предоставленных AdventureWorksSalesEntitiesObjectContext, элементу управления DataGridView. Параметр этого запроса создается путем выполнения синтаксического анализа идентификатора ID в данных SalesOrderHeader из текстового поля. Этот параметр используется в предложении запроса where для выборки единственного значения SalesOrderHeader, которое согласуется с идентификатором. Запрос присваивается свойству DataSource элемента управления DataGridView. На приведенной выше иллюстрации верхний элемент управления DataGridView в форме Windows Form с меткой Sales Order Header заполняется данными с помощью следующего фрагмента кода. Использование метода Execute обеспечивает однократное выполнение запроса.

ObjectParameter parameter =
            new ObjectParameter("p", Int32.Parse(textBoxOrderId.Text));
            dataGridViewSOHeader.DataSource =
                 objCtx.SalesOrderHeader.Where(
                "it.SalesOrderID == @p",
                 parameter).Execute(MergeOption.OverwriteChanges);

На приведенной выше иллюстрации элемент управления DataGridView с меткой Sales Order Details заполняется данными с помощью следующего фрагмента кода. В SalesOrderHeader имеется коллекция связанных сущностей SalesOrderDetail, идентифицируемая свойством SalesOrderDetail сущности SalesOrderHeader. Свойство SalesOrderDetail фактически представляет собой коллекцию EntityCollection. Коллекция может быть присвоена свойству DataSource элемента управления BindingSource. Затем элемент управления BindingSource присваивается свойству DataSource элемента управления DateGridView.

    if(objCtx.SalesOrderHeader.Where(
                "it.SalesOrderID == @p", parameter).Any())
            {
                SalesOrderHeader resultHeader =
                    objCtx.SalesOrderHeader.Where(
                    "it.SalesOrderID == @p", parameter).First();

                resultHeader.SalesOrderDetail.Load();
                dataGridViewOrderDetails.DataSource = 
                    resultHeader.SalesOrderDetail;
            }

Изменения в сценариях привязки данных

Если изменение внесено в одну из сущностей SalesOrderDetail, отображаемых в сетке данных Sales Order Detail, то данные, привязанные к сущности SalesOrderHeader, должны быть обновлены после записи новых данных в хранилище. Это действие выполняется обработчиком операции изменения ячейки в следующем фрагменте кода.

Вначале изменения, внесенные в ячейку, передаются на хранение с помощью метода SaveChanges объекта ObjectContext. Затем в запросе ObjectQuery происходит получение сущности SalesOrderHeader. Наконец, метод Refresh объекта ObjectContext обновляет данные, привязанные к элементу управления DataGridControl. Заслуживает внимание то, что параметр RefreshMode.StoreWins метода Refresh, который задает данные, получаемые из хранилища, применяется для замены данных в контексте ObjectContext.

    objCtx.SaveChanges();

    ObjectParameter parameter =
            new ObjectParameter("p", Int32.Parse(textBox1.Text));

    SalesOrderHeader header =
    objCtx.SalesOrderHeader.Where(
           "it.SalesOrderID == @p", parameter).FirstOrDefault();

    // Refresh the SalesOrderHeader in the grid.
    objCtx.Refresh(RefreshMode.StoreWins, header);

Сценарии применения кода, рассматриваемые в этом разделе, характеризуют основные характеристики средств привязки данных Entity Framework, используемых в образце приложения привязки данных AdventureWorks. А весь код включен в разделы: среда Код приложения привязки данных AdventureWorks (образец приложения модели EDM) и среда Форма добавления элементов SalesOrderDetail из образца приложения привязки данных AdventureWorks (образец приложения модели EDM).

См. также

Основные понятия

Модель AdventureWorks Sales (модель EDM)
Код приложения привязки данных AdventureWorks (образец приложения модели EDM)
Форма добавления элементов SalesOrderDetail из образца приложения привязки данных AdventureWorks (образец приложения модели EDM)