Запросы к сущностям и ассоциациям (краткое руководство по платформе Entity Framework)
В этой задаче создаются строго типизированные запросы к объектам среды CLR, которые представляют сущности и ассоциации в модели School, а элементы управления отображением привязываются к коллекциям объектов, возвращаемым этими запросами.
Запрос данных о факультетах из базы данных School
В начале файла с кодом для формы CourseViewer добавьте директиву using (C#) или Imports (Visual Basic), чтобы сослаться на модель, созданную из базы данных School, и пространство имен сущностей.
Imports System.Data.Objects Imports System.Data.Objects.DataClasses Imports CourseManager.SchoolModel
using System.Data.Objects; using System.Data.Objects.DataClasses;
В начале определения разделяемого класса для формы CourseViewer добавьте следующий код, создающий экземпляр ObjectContext.
' Create an ObjectContext instance based on SchoolEntity. Private schoolContext As SchoolEntities
// Create an ObjectContext instance based on SchoolEntity. private SchoolEntities schoolContext;
В конструкторе форм CourseViewer дважды щелкните форму CourseViewer.
Откроется страница с кодом формы, и будет создан метод обработчика события courseViewer _Load.
В методе обработчика события courseViewer _Load скопируйте и вставьте следующий код, который определяет представление DataGridView, выполняет запрос, возвращающий коллекцию факультетов (упорядоченную по параметру Name), и привязывает коллекцию объектов Department к элементу управления departmentList.
' Initialize the ObjectContext. schoolContext = New SchoolEntities() ' Define a query that returns all Department objects and related ' Course objects, ordered by name. Dim departmentQuery As ObjectQuery(Of Department) = _ schoolContext.Department.Include("Course").OrderBy("it.Name") Try ' Bind the ComboBox control to the query, which is ' executed during data binding. Me.departmentList.DataSource = departmentQuery Me.departmentList.DisplayMember = "Name" Catch ex As Exception MessageBox.Show(ex.Message) End Try
// Initialize the ObjectContext. schoolContext = new SchoolEntities(); // Define a query that returns all Department objects and related // Course objects, ordered by name. ObjectQuery<Department> departmentQuery = schoolContext.Department.Include("Course").OrderBy("it.Name"); try { // Bind the ComboBox control to the query, which is // executed during data binding. this.departmentList.DataSource = departmentQuery; this.departmentList.DisplayMember = "Name"; } catch (Exception ex) { MessageBox.Show(ex.Message); }
Отображение курсов для выбранного факультета
В конструкторе форм CourseViewer дважды щелкните элемент управления departmentList.
Будет создан метод обработчика события departmentList_SelectedIndexChanged.
Вставьте следующий код, который загружает курсы, связанные с выбранным факультетом.
Try ' Get the object for the selected department. Dim department As Department = _ CType(Me.departmentList.SelectedItem, Department) ' Bind the grid view to the collection of Course objects ' that are related to the selected Department object. courseGridView.DataSource = department.Course courseGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells) Catch ex As Exception MessageBox.Show(ex.Message) End Try
try { // Get the object for the selected department. Department department = (Department)this.departmentList.SelectedItem; // Bind the grid view to the collection of Course objects // that are related to the selected Department object. courseGridView.DataSource = department.Course; courseGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); } catch (Exception ex) { MessageBox.Show(ex.Message); }
Следующие шаги
Были успешно созданы запросы, возвращающие объекты Department и Course и связывающие эти объекты с элементами управления. После этого необходимо сохранить изменения, выполненные для объектов Course в сетке данных, в базе данных: Вставка и обновление данных (краткое руководство по платформе Entity Framework).
См. также
Основные понятия
Другие ресурсы
Образцы (платформа Entity Framework)
Службы объектов (платформа Entity Framework)