3.EF Code-First 示例
原文链接:http://www.entityframeworktutorial.net/code-first/simple-code-first-example.aspx
在前面一节中,我们学会了怎么,在我们项目中安装Entity Framework。现在我们来创建一个简单的Code-First示例吧:
假定,我们想为XYZ学校创建一个简单的应用程序,使用这个程序来添加、更新学生信息,以及学生分数信息,班级信息还有老师信息。
不像之前传统做法那样,先创建数据库,这里我们为我们的学生创建学生领域类。首先创建Student,以及Grade实体,代码中一个学生实体和一个Grade实体相关联。这被称作为一对多的关系。后面的章节中,我们将会学到EF怎么管理实体之间的关系。
我们创建一个控制台应用程序,安装好EF。
然后创建Student 和Grade类
public class Student
{
/// <summary>
/// 学生ID
/// </summary>
public int StudentID { get; set; }
/// <summary>
/// 学生姓名
/// </summary>
public string StudentName { get; set; }
/// <summary>
/// 出生日期
/// </summary>
public DateTime? DateOfBirth { get; set; }
/// <summary>
/// 图片
/// </summary>
public byte[] Photo { get; set; }
/// <summary>
/// 身高
/// </summary>
public decimal Height { get; set; }
/// <summary>
/// 体重
/// </summary>
public float Weight { get; set; }
/// <summary>
/// 导航属性--Grade--年级
/// </summary>
public Grade Grade { get; set; }
}
public class Grade
{
public int GradeID { get; set; }
public string GradeName { get; set; }
public string Section { get; set; }
public ICollection<Student> Students { get; set; }
}
如上,我们创建好了程序的领域类。
Code-First方式,同样还需要一个上下文类,上下文类是继承自DbContext类的类。创建一个上下文类,如下,它继承自DbContext,暴露两个属性Students和Grades.
现在,我们已经创建好了Code-First方式需要的类,现在来测试一下:
运行项目:
表示一个学生信息已经成功添加到了数据库中。
但是,数据库在哪里呢?数据表呢?数据列呢?
这就是EF Code-First API 迷人之处。它基于你在上下文类的构造函数中传递的参数,创建数据库。因为这里,我们在上下文类的构造函数中没有传递任何参数,EF 就给我们在这里创建了数据库:
C:\Users\你的计算机名称
这个数据库不能附加,我们可以在配置文件,配置一下:
然后修改一下,上下文类的构造函数:
再运行项目看看:
说明成功创建了数据库,我们看下生成的数据库:
就像上面图形中所示,EF为我们创建了数据库,还创建了相应的数据表,数据列。这样我们就使用Code-First,创建了数据库.
请注意:如果你修改了实体,再运行项目的话,就会报错:例如,我在Student实体中加一个属性Email。
然后运行项目:
出现这个错误,是需要进行数据库迁移。你需要在上下文类中,定义数据库初始化策略,然后修改实体,最后运行项目。数据库迁移技术,我好多系列文章中都讲到了,当然 这个系列还是会告诉大家怎么配置,大家可以到时候好好跟着我巩固一下。
你现在肯定很好奇,EF API是怎么创建合适类型的数据列的,怎么创建主键,怎么创建外键的?答案就是使用Code-First默认的约定配置。下面一节中,我们将学习Code-First默认约定。