新版EF,系统实现过程中如果对Model进行更改,队形修改数据库并不能正常运行项目,需要借助Code First 手动迁移数据库
首先启用迁移,允许迁移Context
Tools->Library Package Manager->Package Manager Console 运行 Enable-Migrations
执行命令在项目中创建Migrations 文件夹 ,包含两个类
Configuration 类:给定迁移的相关配置
InitialCreate 类:继承迁移基类,实现Up和Down方法,Up方法数据库向上迁移时执行,Down方法数据库向下迁移时执行。主要是实现数据库的建表,删除表,添加列,删除列,创建主键、外键,删除主键、外键,重命名等操作。
接下来就可以生成迁移和执行迁移
Add-Migration + 迁移名 将根据自创建上次迁移以来您对模型所做的更改,为下一次迁移搭建基架。
该操作生成一个迁移名定义的类,和InitialCreate 类一样,定义了相应的数据库更改操作。
Update-Database 将所有挂起的迁移应用于数据库。
迁移到特定版本(包括降级) 运行 Update-Database –TargetMigration: 迁移名
如果要一直回滚到空数据库,可以使用 Update-Database –TargetMigration: $InitialDatabase
如何实现数据的移动和更改(如新创建的列,采用已存在列的数据填充):
Sql("相应的SQL数据操作语句");
获取 数据库迁移 SQL 脚本(如将更改推送到测试服务器或其他开发人员机器)
运行 Update-Database 命令,但此时指定 –Script 标记,使更改写入脚本而不应用。
希望产生的脚本是从一个空数据库($InitialDatabase)到最新的版本 (-TargetMigration为空即可)
Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration:
应用程序启动时自动升级
通过注册 MigrateDatabaseToLatestVersion 数据库初始化器来实现这一点,数据库初始化器只包含一些逻辑检查用于确保数据库被正确设置,这个逻辑检查将会在context 第一次被使用的时候执行。
启动时通过 Database.SetInitializer(new MigrateDatabaseToLatestVersion<XXContext,Configuration>()); 设定MigrateDatabaseToLatestVersion 初始值设定项