演练5-1:Contoso大学校园管理1

**演练目的:掌握复杂模型的应用程序开发。

Contoso大学校园管理系统功能包括学生、课程、教师的管理。

一、创建MVC Web应用程序

显示效果如下图,操作步骤略。

二、创建数据模型

1.创建学生实体

using System;
using System.Collections.Generic;

namespace ContosoUniversity.Models
{
    public class Student
    {
        public int StudentID { get; set; }
        public string LastName { get; set; }
        public string FirstMidName { get; set; }
        public DateTime EnrollmentDate { get; set; }

        public virtual ICollection<Enrollment> Enrollments { get; set; }
    }
}

StudentID属性时主键,EF默认将Id或者classnameID作为主键。

Enrollments属性是导航属性,导航属性拥有与这个实体相关联的实体。此处为学生实体拥有相关的所有课程注册实体,如在数据库中,课程注册表中张三有三条记录,那么导航属性就会有3条Enrollment行。创建导航属性后,数据库数据表将自动生成外键。如果导航属性能包含多个实体(如一对多,多对多),类型必须为集合,比如Icollection。

导航属性通常定义成virtual,这样就可以好好利用EF的lazy loading(延迟加载)功能。延迟加载是指暂时不需要该数据,不用在当前马上加载,而可以推迟到使用它时再加载。延迟加载是一种很重要的数据访问特性,可以有效地减少与数据源的交互(注意,这里所提的交互不是指交互次数,而是指交互的数据量),从而提升程序性能。

2.创建课程实体

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;

namespace ContosoUniversity.Models
{
    public class Course
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int CourseID { get; set; }
        public string Title { get; set; }
        public int Credits { get; set; }

        public virtual ICollection<Enrollment> Enrollments { get; set; }
    }
}

      Enrollments属性是导航属性。

CourseID考虑到可能有特殊的数据规则,使用[DatabaseGenerated(DatabaseGeneratedOption.None)],将不采用数据库自动生成的序号。

3.创建注册实体

namespace ContosoUniversity.Models
{
    public enum Grade
    {
        A, B, C, D, F
    }

    public class Enrollment
    {
        public int EnrollmentID { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
        public Grade? Grade { get; set; }

        public virtual Course Course { get; set; }
        public virtual Student Student { get; set; }
    }
}

Grade属性是一个enum枚举类型,?表示该属性可以为空。

StudentID属性是一个外键,相应的导航属性是Student。一个注册实体和一个学生实体相关联,所以导航属性拥有一个Student实体,而不是之前的ICollection集合。

CourseID同理。

4.创建数据库上下文

创建一个DAL(Data Access Layer)文件夹,在文件夹中新建SchoolContext.cs类。

using ContosoUniversity.Models;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace ContosoUniversity.DAL
{
    public class SchoolContext : DbContext
    {
        public DbSet<Student> Students { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        public DbSet<Course> Courses { get; set; }
    }
}

这段代码为每个实体集合,创建了一个DbSet属性。在EF技术中,一个实体集合对应一张数据库表,一个实体对应表中的一行。

修改Web.config文件。

<add name="SchoolContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=ContosoUniversity;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\ContosoUniversity.mdf" providerName="System.Data.SqlClient" />

默认情况下,EF会寻找DbContext类名字的连接字符串名字。在这个连接字符串中,你已经在App_Data文件夹下添加了一个名字为ContosoUniversity.mdf的LocalDB数据库。如果没有指定连接字符串,EF会为你新建一个。
5.开启Code First Migrations

(1)打开Package Manager控制台

(2)输入命令Enable-Migrations -ContextTypeName SchoolContext

Configuration类包含一个Seed方法,可以在数据库创建时更新一些模型数据。

(3)

时间: 2024-11-05 23:36:18

演练5-1:Contoso大学校园管理1的相关文章

演练5-7:Contoso大学校园管理系统(实现继承)

在上一次教程中,你已经能够处理并发异常.这个教程将会展示如何在数据模型中实现继承. 在面向对象的程序设计中,你可以通过继承来清除冗余的代码.在这个教程中,你将要通过修改教师 Instructor 和学生 Student 类,以便使他们从包含类似 LastName 属性的 Person 类中派生.对于 Web 页面不需要任何改动,你需要修改一点代码,这些修改将会被自动反射到数据库中. 一.单表继承 (Table-per-Hierarchy)  vs 类型表 (Table-per-Type) 继承

演练5-4:Contoso大学校园管理系统4

在之前的教程中,我们已经完成了学校的数据模型.现在我们将读取和显示相关数据,请理解EF装载导航属性的方式. 下图显示了我们将要实现的页面效果. 一.Lazy.Eager.Explicit数据加载 使用EF为实体中的导航属性加载相关数据,有下面几种方法. 1.Lazy loading 当实体第一次读取时,相关数据并没有获得.然而当你第一次想要访问导航属性时,导航属性的相关数据会自动获得.这产生了多次访问数据库,一次是实体数据读取,一次是导航属性读取. 2.Eager loading 当实体读取时,

演练5-6:Contoso大学校园管理系统6

在上一次的教程中,我们处理了关联数据问题.这个教程演示如何处理并发问题.你将使用Department实体创建一个页面,这个页面在支持编辑和删除的同时,还可以处理并发错误.下面的截图演示了Index页面和Delete页面,包括在出现并发冲突的时候提示的一些信息. 一.并发冲突 并发冲突出现在这样的时候,一个用户正在显示并编辑一个实体,但是在这个用户将修改保存到数据库之前,另外的一个用户却更新了同样的实体.如果你没有通过EF检测类似的冲突,最后一个更新数据的用户将会覆盖其他用户的修改.例如,一个大客

Contoso 大学 - 使用 EF Code First 创建 MVC 应用,实例演练

Contoso 大学 Web 示例应用演示了如何使用 EF 技术创建 ASP.NET MVC 应用.示例中的 Contoso 大学是虚构的.应用包括了类似学生注册.课程创建以及教师分配等功能. 这个系列教程展示了创建 Contoso 大学应用的步骤.你可以 下载完整 的程序,或者按照教程一步一步创建它,这个教程中使用 C# 进行演示,下载的代码中同时包含 C# 和 VB 实现.如果你有与这个教程没有直接相关的问题,可以张贴到 ASP.NET Entity Framework forum  或者

Contoso 大学 - 3 - 排序、过滤及分页

原文地址:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application 在上一个课程中,我们已经学习了如何使用 EF 对 Student 实体进行增.删.改.查处理.这次的课程我们将对学生的 Index 页面加入排序.过滤以及分页的功能.还要创建一个页面完成

Contoso 大学 - 5 – 读取关联数据

原文地址:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application 全文目录:Contoso 大学 - 使用 EF Code First 创建 MVC 应用 在前面的课程中已经完成了 School 数据模型.在这次的课程中,将要读取和显示相关的数据,这里指的是 EF 通

Contoso 大学 - 7 – 处理并发

原文地址:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application 全文目录:Contoso 大学 - 使用 EF Code First 创建 MVC 应用 在上一次的教程中我们处理了关联数据问题.这个教程演示如何处理并发问题.你将使用 Department 实体创建一

Contoso 大学 - 1 - 为 ASP.NET MVC 应用程序创建 EF 数据模型

原文地址:Creating an Entity Framework Data Model for an ASP.NET MVC Application (1 of 10) Contoso 大学 Web 示例应用演示了如何使用 EF 技术创建 ASP.NET MVC 应用.示例中的 Contoso 大学是虚构的.应用包括了类似学生注册.课程创建以及教师分配等功能. 这个系列教程展示了创建 Contoso 大学应用的步骤.你可以 下载完整 的程序,或者按照教程一步一步创建它,这个教程中使用 C# 进

Contoso 大学 - 8 – 实现继承

原文地址:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application全文目录:Contoso 大学 - 使用 EF Code First 创建 MVC 应用 在上一次教程中,你已经能够处理并发异常.这个教程将会展示如何在数据模型中实现继承.在面向对象的程序设计中,