查询实体和关联(实体框架快速入门)
在本任务中,您将针对在 School 模型中表示实体和关联的 CLR 对象创建强类型查询,并将显示控件绑定到从这些查询中返回的对象集合。
在 School 数据库中查询系
在 CourseViewer 窗体的代码文件的开始处,添加以下 using (C#) 或 Imports (Visual Basic) 语句,以引用从 School 数据库和实体命名空间中创建的模型。
Imports System.Data.Objects Imports System.Data.Objects.DataClasses
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) = _ From d In schoolContext.Departments.Include("Courses") _ Order By d.Name _ Select d Try ' Bind the ComboBox control to the query. ' To prevent the query from being executed multiple times during binding, ' it is recommended to bind controls to the result of the Execute method. Me.departmentList.DisplayMember = "Name" Me.departmentList.DataSource = CType(departmentQuery, ObjectQuery).Execute(MergeOption.AppendOnly) 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 course objects, ordered by name. var departmentQuery = from d in schoolContext.Departments.Include("Courses") orderby d.Name select d; try { // Bind the ComboBox control to the query, // which is executed during data binding. // To prevent the query from being executed multiple times during binding, // it is recommended to bind controls to the result of the Execute method. this.departmentList.DisplayMember = "Name"; this.departmentList.DataSource = ((ObjectQuery)departmentQuery).Execute(MergeOption.AppendOnly); } 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.Courses ' Hide the columns that are bound to the navigation properties on Course. courseGridView.Columns("Department").Visible = False courseGridView.Columns("StudentGrades").Visible = False courseGridView.Columns("OnlineCourse").Visible = False courseGridView.Columns("OnsiteCourse").Visible = False courseGridView.Columns("People").Visible = False courseGridView.Columns("DepartmentId").Visible = False courseGridView.AllowUserToDeleteRows = False 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.Courses; // Hide the columns that are bound to the navigation properties on Course. courseGridView.Columns["Department"].Visible = false; courseGridView.Columns["StudentGrades"].Visible = false; courseGridView.Columns["OnlineCourse"].Visible = false; courseGridView.Columns["OnsiteCourse"].Visible = false; courseGridView.Columns["People"].Visible = false; courseGridView.Columns["DepartmentId"].Visible = false; courseGridView.AllowUserToDeleteRows = false; courseGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); } catch (Exception ex) { MessageBox.Show(ex.Message); }
后续步骤
您已成功地创建了返回 Department 和 Course 对象的查询并将这些对象绑定到控件。 接下来,您需要将在数据网格中对 Course 对象所做的更改保存到数据库中:插入和更新数据(实体框架快速入门)。