ASP.NET Core 使用 Entity Framework 迁移
本篇介绍利用 Entity Framework 的迁移技术,通过模型来创建数据库。在开发阶段,数据模型会频繁改动。每当模型发生改变时,也可以通过迁移来让数据库也做出同样的改动。
在应用迁移之前先做一些准备工作,在数据库上下文类中添加红框内的代码,将模型绑定到上下文对象:
右键点击项目,选择 "在终端中打开" 或 "Open In Terminal" 打开命令行工具,输入以下命令,安装最新版的 Microsoft.EntityFrameworkCore.Design:
dotnet add package Microsoft.EntityFrameworkCore.Design
确保您的 Microsoft.EntityFrameworkCore.Design 和 Microsoft.EntityFrameworkCore 版本保持一致。同时确保所有文档都已保存并且项目能顺利编译通过,在刚刚打开的命令行工具输入以下命令创建迁移:
dotnet ef migrations add init
现在我们创建了一个迁移,并把它命名为 init。这时项目多出来一个文件夹 Migrations 里面的文件定义了本次迁移要执行的代码。打开以数字开头、_init 结尾的那个文件(其实数字是时间的数字表示形式,当有多个迁移文件时会根据数字进行排序方便找到最新的迁移文件),可以看到里面主要有 2 个方法:Up
、Down
。
- Up 方法:本次是第一次执行迁移,这个方法要做的事就是根据前面模型的配置创建表、字段、关系等等。
- Down方法:这个方法和Up方法相反,如果某种原因需要回退就会被执行。
要删除迁移可以执行以下命令:
dotnet ef migrations remove
执行命令后会删除最新的那个迁移,重复执行该命令会继续删除最新的迁移。
继续在命令行工具输入以下命令执行迁移:
dotnet ef database update
这时,打开您的数据库,可以发现,EF 已经将表建好。
更新数据
在创建和应用迁移后,以后可能随着业务的需要要改变模型,比如重命名某个表的列,这时需要创建新的迁移。比如重命名 Employee 的列 Name 为 EmployeeName:
namespace MyFirstCoreWebApp.Models
{
public class Employee
{
public int ID { get; set; }
public string EmployeeName { get; set; }
public DateTime EntryDate { get; set; }
}
}
保存文档并在命令行工具输入创建迁移的命令:
dotnet ef migrations add ResetEmployeeName
执行完毕后创建了以 _ResetEmployeeName 结尾的迁移文件,打开可以看到 Up
方法内的代码:
继续在命令行工具输入更新数据库的命令:
dotnet ef database update
表 Employee 的字段 EmployeeName 就被命名为 EmployeeName。
到目前为止,前期的工作已经做好了,创建了数据库上下文对象 DbContext,创建和配置好了模型,生成了数据库,接下来的章节,我们学习如何新增修数据。