012-使用Code First数据库迁移
当Entity Framework Code First的数据模型发生异动时,默认会引发一个System.InvalidOpertaionException异常。一种解决方法是将已有数据库删除,另一种方法是在Global.asax文档里的Application_Sart方法上,加上一段System.Data.Entity.Database.SetInitializer()方法,让EF自动将数据库删除,然后重新创建模型。不过,这种将数据库砍掉重建的方式实在过于残暴,应该使用更人性化的方式,让EF帮助我们自动调整数据库架构,并且仍然保留现有数据库中的数据。而这种开发技术就是Code First数据库迁移(DB Migration)。
System.Data.Entity.Database.SetInitializer(
new System.Data.Entity.DropCreateDatabaseIfModelChanges<MvcGuestbook.Models.MvcGuestbookContext>());
System.Data.Entity.DropCreateDatabaseIfModelChanges方法的作用是在Model发生改变时,会运行Drop和Create Database等动作。
EF Code First数据库迁移的方法。
- Enable-Migrations
- Add-Migration Initial
- Update-Database
1. EF Code First如何记录版本
2. 启用数据库迁移
若要在项目中启用数据库迁移功能,必须先开启程序包管理器控制台(Package Manager Console)窗格,然后输入Enable-Migrations指令。
我们在使用EF进行数据库迁移时,需要用到vs集成开发环境里的工具( )进行迁移。
A.程序包可视化工具 B.NuGet工具 C.程序包管理器控制台 D.工具箱
按下Enter键后,Packae Manager Console会自动扫描这个项目中所有的数据上下文类。如果一个项目中有一个以上的数据类别,就会出现错误,必须选用其中一个来启用数据库迁移功能。
PM> Enable-Migrations -ContextTypeName MvcGuestbook.Models.MvcGuestbookContext
运行Enable-Migrations指令的过程中,VS2012会帮助我们在指定的项目里创建一个Migrations目录,该目录下还创建有两个重要的文档,一个是*_InitialCreate.cs文档,另一个是Configuration.cs文档。
(1)*_InitialCreate.cs
(2)Configuration.cs
例,通过Configuration.cs里的Seed方法插入网站初始留言数据。
var messages = new List<Message>
{ new Message {Title="Hello to my space",Author="Admin"},
new Message {Title="This is my second time to be here",Author="Admin"},
new Message {Title="Is there anybody can help me",Author="Mike"}
};
messages.ForEach(m => context.Messages.AddOrUpdate(p => p.Title, m));
context.SaveChanges();
3.运行数据库迁移
我们通过Package Manager Console输入Add-Migration指令,来新增一条数据库迁移版本,输入时必须带上一个“版本名称”参数。例如,要想取名为AddUsernamePassword,则可以输入以下指令:
PM> Add-Migration AddUsernamePassword
运行Add-Migration指令,所代表的意思就是新增一次运行数据库迁移命令,VS2012会自动对比当前数据库中的Model定义与当前更改过的数据模型,并将差异的字段变化写入这个自动新增的类别内。
每一次新增数据库迁移版本,其类别内都会包含一个Up()方法与Down()方法,所代表的意思分别是“升级数据库”与“降级数据库”的动作,所以数据库迁移不仅仅是将数据库升级,还可以恢复到旧版本。
接着我们正式对数据库进行迁移动作。
PM> Update-Database
4.自定义数据库迁移规则
5.自动数据库迁移
Enable-Migrations –EnableAutomaticMigration
对于实体插入操作,直接使用Update-Database
对于实体更新和删除操作,使用
Add-Migration Initial
Update-Database
6.如何避免数据库被自动创建或自动迁移
7.获取Sql脚本
- Update-Database –Script
- Update-Database –Script –SourceMigration:$InitialDatabase –TargetMigration: AddPostAbstract
8. 迁移到特定版本
Update-Database –TargetMigration:ad1
Update-Database –TargetMigration:$InitialDatabase

浙公网安备 33010602011771号