当程序开始运行之后,会自动生成实体模型对应的表,当对实体模型进行修改时,需要更新对应的数据库表,这时就需要使用数据库迁移来更新数据库的表结构。
数据库迁移的步骤是:
1、点击工具->NuGet包管理器->程序包管理器控制台
2、在打开的控制台输入enable-migrations开始数据迁移,进行迁移配置
在资源管理器可以看到生成了Migrations文件夹以及两个.cs文件
关于Configuration.cs:
在此文件中可以看到Seed方法,Seed 方法的目的是在 Code First 创建或更新数据库后插入或更新的测试数据。
Seed 方法将数据库上下文对象作为输入参数,该方法中的代码使用该对象向数据库添加新实体。 对于每个实体类型,代码将创建一组新实体,将它们添加到相应的 DbSet 属性,然后将更改保存到数据库。
使用的AddOrUpdate方法,目的在于当实体已经在数据库存在时,用于修改该实体,Seed因为每次执行update-database
命令时,方法都会运行,通常在每个迁移后,你不能只插入数据,因为尝试添加的行在创建数据库的第一次迁移之后就已存在。 如果尝试插入已存在的行,则会阻止出现“upsert”操作,会停止测试应用程序时可能对数据所做的任何更改。
传递给 AddOrUpdate 方法的第一个参数指定用于检查行是否存在的属性。
3、开始数据迁移,在控制台输入Add-migration [自定义版本名称]
在 Migrations文件夹生成了202210100802065_Record.cs文件
执行Add-migration [自定义版本名称]命令时,迁移会生成从头开始创建数据库的代码。 此代码还位于 Migrations 文件夹中,名为 <timestamp>_自定义版本名称.cs 的文件中。 类中 Up
的方法创建对应于数据模型实体集的数据库表,这里的Down函数简单介绍就是:为了回滚修改而设计的。如果用户希望恢复到某一个迁移节点,程序会自动根据已经执行的迁移,判断回滚哪些迁移,执行他们的Down函数。。
4、最后update-database
update-database
命令运行 Up
方法以创建数据库,然后运行 Seed
方法以填充数据库。
更多可以阅读大神的文章:(译)给ASP.NET MVC 创建一个实体数据模型(一) - 清语堂 - 博客园
写的非常详细