[翻译]ADO.NET Entity Framework Beta2(九)/快速入门(实体框架)(4)/查询实体及关系

简介:

This is the final task of the Entity Framework Quickstart. In this task, you will create strongly-typed queries against the CLR objects that represent entities and associations in the School model, and bind display controls to the object collections returned from these queries. You will also run the completed ClassSchedule application.

本任务是 实体框架快速入门的最后一个任务。在本任务中,你将创建强类型的基于CLR对象的查询来展现学校数据库内的实体和关系,并且将显示控件绑定到由这些查询所返回的对象集合。最后你能完整的来运行ClassSchedule应用程序。

To query the students in the School database/查询学校数据库内的学生

  1. At the beginning of the code file for the StudentSchedule form, add the following using (C#) or Imports (Visual Basic) statements to reference the model created from the School database and the entity namespace.
    在StudentSchedule窗体的代码开头,按照使用的语言不同,添加以下引用声明以引用学生数据库和实体命名空间内的模型。

    Visual Basic
    Imports SchoolModel
    Imports System.Data.Objects
    C#
    using System.Data.Objects;
    using SchoolModel;
  2. At the top of the partial class definition for the StudentSchedule form, add the following code that creates an ObjectContext instance.
    在StudentSchedule窗体的部分类定义开头,添加以下代码以创建一个实体关联对象(ObjectContext)的实例

    Visual Basic
    ' Create an ObjectContext instance based on SchoolEntity.
    ' 基于学校实体创建一个实体关联对象
    Private schoolContext As SchoolEntities
    C#
    // Create an ObjectContext instance based on SchoolEntity.
    // 基于学校实体创建一个实体关联对象
    private SchoolEntities schoolContext;
  3. In the StudentSchedule form designer, double-click the StudentSchedule form.
    在StudentSchedule窗体的设计界面,双击窗体。

    This opens the code page for the form and creates the studentSchedule_Load event handler method.
    开发环境将自动转到代码设计窗体,并自动创建studentSchedule_Load事件处理程序。

  4. In the studentSchedule_Load event handler method, copy and paste the following code that defines the DataGridView, executes a query that returns a collection of students (ordered by LastName), and binds the collection of Person objects to the studentList control.
    在studentSchedule_Load事件处理程序内,复制并粘贴以下代码以定义DataGridView控件的外观、执行一个返回学生集合(按LastName排序)的查询,以及将人的集合对象绑定到studentList控件

    Visual Basic
    ' Initialize the ObjectContext.
    ' 初始化实体关联对象
    schoolContext = New SchoolEntities()

    ' Define the DataGridView.
    ' 定义DataGridView
    studentClasses.Columns.Add("courseName", "Course Name")
    studentClasses.Columns.Add("courseDate", "Date Completed")
    studentClasses.Columns.Add("courseGrade", "Grade")
    studentClasses.Columns.Add("courseCredits", "Credits")

    ' Get students as all people who have enrollment dates.
    ' 获得所有拥有入学日期的学生作为全体集合
    Dim students As ObjectQuery(Of Person) = _
    schoolContext.Person.Where( _
    "it.EnrollmentDate IS NOT NULL").OrderBy("it.LastName")

    ' Define the query path for queries that return a Person object
    'and bind the ComboBox to the collection returned by the query.
    ' 为查询定义查询路径以返回一个Person对象
    '然后将ComboBox控件绑定到查询所返回的集合上
    Me.studentsList.DataSource = students.Include("Enrollment.Course")
    Me.studentsList.DisplayMember = "LastName"
    C#
    // Initialize the ObjectContext.
    //初始化实体关联对象
    schoolContext = new SchoolEntities();

    // Define the DataGridView.
    // 定义DataGridView
    studentClasses.Columns.Add("courseName", "Course Name");
    studentClasses.Columns.Add("courseDate", "Date Completed");
    studentClasses.Columns.Add("courseGrade", "Grade");
    studentClasses.Columns.Add("courseCredits", "Credits");

    // Get students as all people who have enrollment dates.
    // 获得所有拥有入学日期的学生作为全体集合
    ObjectQuery<Person> students = schoolContext.Person.Where(
    "it.EnrollmentDate IS NOT NULL").OrderBy("it.LastName");

    // Define the query path for queries that return a Person object
    // and bind the ComboBox to the collection returned by the query.
    // 为查询定义查询路径以返回一个Person对象

    // 然后将ComboBox控件绑定到查询所返回的集合上
    this.studentsList.DataSource = students.Include("Enrollment.Course");
    this.studentsList.DisplayMember = "LastName";

To display classes for the selected student /显示被选中学生的课程情况

  1. In the StudentSchedule form designer, double-click the studentsList control.
    在StudentSchedule窗体的设计界面,双击studentsList控件

    This creates the studentsList_SelectedIndexChanged event handler method.
    将自动创建studentsList_SelectedIndexChanged事件处理程序

  2. Paste the following code that loads the courses that are related to the selected student.
    粘贴以下代码.这些代码将按照选中的学生加载相关的课程信息

    Visual Basic
    Try
    ' clear existing rows from the DataGridView.
    ' 将DataGridView内的现有行清空
    studentClasses.Rows.Clear()

    ' Get the Person object for the selected student.
    ' 获取被选中的学生对象
    Dim student As Person = CType(studentsList.SelectedItem, Person)

    Dim enrollment As Enrollment
    For Each enrollment In student.Enrollment
    ' Create an array of row cells.
    ' 创建一个单元格数组作为行
    Dim row() As Object = New Object(4) {}

    ' Load object values from entities.
    ' 获取实体的各种值
    row(0) = enrollment.Course.Title
    row(1) = enrollment.Course.EndDate
    row(2) = enrollment.Grade
    row(3) = enrollment.Course.Credits

    ' Add the new row to the DataGridView.
    ' 将新行添加到DataGridView
    studentClasses.Rows.Add(row)
    studentClasses.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
    Next
    Catch ex As Exception
    MessageBox.Show(ex.Message)
    End Try
    C#
    try
    {
    // clear existing rows from the DataGridView.

    // 将DataGridView内的现有行清空
    studentClasses.Rows.Clear();

    // Get the Person object for the selected student.
    // 获取被选中的学生对象
    Person student = (Person)studentsList.SelectedItem;

    foreach (Enrollment enrollment in student.Enrollment)
    {
    // Create an array of row cells.
    // 创建一个单元格数组作为行
    object[] row = new object[4];

    // Load object values from entities.
    // 获取实体的各种值
    row[0] = enrollment.Course.Title;
    row[1] = enrollment.Course.EndDate;
    row[2] = enrollment.Grade;
    row[3] = enrollment.Course.Credits;

    // Add the new row to the DataGridView.
    // 将新行添加到DataGridView
    studentClasses.Rows.Add(row);
    studentClasses.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
    }
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }

To close connections by disposing the long-running object context
释放实体关联对象以关闭连接

  • In the closeForm_Click event handler method, type the following code. This code disposes of the object context before the form is closed.
    closeForm_Click事件处理方法内,键入以下代码。这些代码将在窗体关闭之前释放实体关联对象。

    Visual Basic
    ' Dispose the object context.
    ' 释放实体关联对象
    schoolContext.Dispose()
    C#
    // Dispose the object context.
    // 释放实体关联对象
    schoolContext.Dispose();

To build and run the Class Scheduling application/编译与运行ClassScheduing应用程序

  1. From the Debug menu, select Start Debugging or Start Without Debugging.
    调试菜单,选择启动调试直接运行
    (需要在程序代码的开头额外附加如下两个名字空间的引用,否则会有错误提示.)
    using SchoolModel;
    using System.Data.Objects;

    This builds and starts the application.
    这个步骤将编译并运行应用程序

  2. When the form loads, select a student from the ComboBox control by last name.
    当窗体加载后,在组合框内选择一个学生的名字.

    This displays the courses that the student is taking.
    将在表格内显示该学生关联的课程

Next Steps/下一步

You have successfully created and run the Class Schedule application. You have also completed this Entity Framework quickstart. For more information about the Entity Framework, see the other topics in Object Services (Entity Framework).
你已经成功的创建并运行了ClassSchedule应用程序.

See Also/请参见

Concepts/概念

Working with Entity Data/使用实体数据工作

Other Resources/其他资源

Samples (Entity Framework)/样例(实体框架)
Object Services (Entity Framework)/对象服务(实体框架)

 

作者: 徐少侠
出处: http://www.cnblogs.com/Chinese-xu/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
如有问题,可以通过 Chinese_Xu@126.com 联系我,非常感谢。

分享家:Addthis中文版
标签: 入门, .NET, 编程, EF

本文转自徐少侠博客园博客,原文链接:http://www.cnblogs.com/Chinese-xu/archive/2007/09/29/910481.html,如需转载请自行联系原作者

目录
相关文章
|
7天前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
|
26天前
|
消息中间件 开发框架 监控
NET任务调度框架Hangfire使用指南
Hangfire 是一个用于 .NET 应用程序的开源任务调度框架,支持长时间运行任务、定时任务等。通过简单的安装配置,即可将任务从主线程分离,提升应用性能。支持多种数据库,提供丰富的任务类型如立即执行、延迟执行和周期性任务,并有可视化管理界面 Hangfire Dashboard。还支持安全性配置及扩展插件,如 Hangfire.HttpJob,适合各种复杂场景下的任务调度需求。
48 1
NET任务调度框架Hangfire使用指南
|
2月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
35 5
|
2月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
46 4
|
2月前
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
36 4
|
2月前
|
消息中间件 监控 数据可视化
基于.NET开源、功能强大且灵活的工作流引擎框架
基于.NET开源、功能强大且灵活的工作流引擎框架
|
2月前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
4月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
51 7
|
4月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
85 0
|
5月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
66 0