Code First 更新数据库结构
参考:http://blog.csdn.net/sxycxwb/article/details/12186159
0、删除之前的数据库
1、Run the Enable-Migrations command in Package Manager Console
进入(PM)软件包管理控制台 (视图——》其他窗口——》程序包管理控制台)输入以下指令:Enable-Migrations
会提示:"No context type was found in the assembly",可能是因为“0”的原因,不过可以通过“2”解决。
2、PM> Enable-Migrations -ProjectName <Your project Name> -StartUpProjectName <Start up project name>
如:PM> Enable-Migrations -ProjectName MVC_MODELS -StartUpProjectName MVC_WEB
结果: Checking if the context targets an existing database...
Detected database created with a database initializer. Scaffolded migration '201407041310515_InitialCreate' corresponding to existing database. To use an automatic migration instead, delete the Migrations folder and re-run Enable-Migrations specifying the -EnableAutomaticMigrations parameter.
Code First Migrations enabled for project MVC_MODMVCELS.
此时:项目中多了一个文件夹(Migrations)和Configuration.cs文件
3、使用Visual Studio打开Configuration.cs文件。使用以下代码替换Seed方法内容:
context.Members.AddOrUpdate( new Member { M_Name = "admin", M_PassWord = "admin" } ); context.Places.AddOrUpdate( new Place { P_Number = "1" } ); context.ConsumRecords.AddOrUpdate( new ConsumRecord { CR_Member = new Member { M_Name = "admin", M_PassWord = "admin" }, CR_Place = new Place { P_Number = "1" } } );
代码先行迁移机制在每次迁移后调用Seed方法,如果存在行数据,则该方法更新现有数据,如果不存在,则该方法插入数据。
按下CTRL+SHIFT+B来生成项目(如果此处不执行此生成操作,后续的步骤会失败)
4、下一步是创建DbMigration 类来初始化迁移。迁移将创建一个新的数据库,这也是在前面步骤中删除数据库文件的原因。
PM> add-migration -ProjectName MVC_MODMVCELS FirstMigration
正在为迁移“FirstMigration”搭建基架。 此迁移文件的设计器代码包含当前 Code First 模型的快照。在下一次搭建迁移基架时,将使用此快照计算对模型的更改。如果对要包含在此迁移中的模型进行其他更改,则您可通过再次运行“Add-Migration 201310140747227_FirstMigration”重新搭建基架。
PM>
代码先行迁移机制在Migrations文件夹下创建另外一个类文件,文件名为时间戳+下划线+ FirstMigration.cs,例如201310140747227_FirstMigration.cs,该类包含了创建数据库架构的代码。迁移文件名预置为时间戳有助于排序。查看该文件,包含了创建Movie库表的说明。当你更新数据库时,该类将被执行,创建数据库架构。随后,Seed方法将被执行,测试数据被添加其中。
5、在程序包管理器控制台窗口,键入"update-database"命令来创建数据库和执行Seed方法。
PM> update-database -ProjectName Xwb.Core.Data 指定“-Verbose”标记以查看应用于目标数据库的 SQL 语句。
正在应用基于代码的迁移: [201310140747227_FirstMigration]。
正在应用基于代码的迁移: 201310140747227_FirstMigration。
正在运行 Seed 方法。
PM>
6、自动迁移
在生成的Configuration中做如下修改:
public Configuration() { AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; }
① AutomaticMigrationsEnabled:获取或设置 指示迁移数据库时是否可使用自动迁移的值。
② AutomaticMigrationDataLossAllowed:获取或设置 指示是否可接受自动迁移期间的数据丢失的值。如果设置为false,则将在数据丢失可能作为自动迁移一部分出现时引发异常。