首页 > 代码库 > EntityFramework CodeFirst 数据库迁移

EntityFramework CodeFirst 数据库迁移

参考:

https://msdn.microsoft.com/en-us/data/jj591621

http://www.itnose.net/detail/6105449.html

http://www.tuicool.com/articles/Q7JRR32

打开:工具 --> NuGet包管理器 --> 程序包管理控制台,按下面的步骤使用相应的命令

//使能迁移功能

命令1. Enable-Migrations -ContextTypeName WebTest.Models.TestDbContext -MigrationsDirectory MigrationsTestDbContext

(Enable-Migrations -ContextTypeName 数据库上下文名称(使用完全限定名,即包含名称空间) -MigrationsDirectory 文件夹名称)

(此命令支持包含多个数据库上下文的项目,将为每个数据库上下文创建独立的文件夹)

 

//添加迁移数据快照

命令2. Add-Migration -configuration WebTest.MigrationsTestDbContext.Configuration InitialCreate

(Add-Migration -configuration 要使用的配置名称(使用完全限定名) 自定义的快照名称(自动添加一个时间戳前缀))

(模型类发生改变后,使用此命令添加迁移快照,其中第一次使用时(未创建数据库时)一般使用“InitialCreate”命名)

 

//更新数据库,将迁移快照应用于数据库

命令3. Update-Database -configuration WebTest.MigrationsTestDbContext.Configuration -Verbose

(Update-Database -configuration 要使用的配置名称(使用完全限定名) -Verbose(可选,显示详细信息,生成的sql语句))

 

//回退数据库

命令4. Update-Database -ProjectName:WebTest -TargetMigration:"201706291258382_InitialCreate" -verbose

 

一般步骤:

1.   设置连接字符串,创建模型类

2.   编译项目

3.   使用命令1开启迁移功能

4.   编译项目

5.   使用命令2添加初始化快照

6.   编译项目

7.   使用命令3,将自动创建数据库,至此数据库初始化完成

8.   当业务调整,数据库需要修改时,修改模型类

9.   编译项目

10. 使用命令2添加迁移快照(最好使用有意义的名称,比如"AddTestBsTable")

11. 编译项目

12. 使用命令3更新数据库,将在保留原数据的情况下升级数据库架构,使数据库架构与最新的模型保持一致

 

//其它

//获取帮助
get-help Enable-Migrations
//获取示例
get-help Enable-Migrations -examples
//获取帮助
get-help Add-Migration -full

//如果出现 Apply the pending explicit migrations before attempting to generate a new explicit migration. 错误,表示有挂起的迁移操作未执行,此时可以先将上一次的快照(如:"201706291123246_InitialCreate.cs")中的 Up() 方法内的代码全部注释掉,再运行一次update-database,就是什么也不做,单纯执行完挂起的migration。

 

//对已经发布在服务器上的网站应用数据库迁移

如下图所示,在web发布选项中勾选 Execute Code First Migrations (runs on application start)

技术分享

EntityFramework CodeFirst 数据库迁移