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"
                    }
                }
                );
View Code

代码先行迁移机制在每次迁移后调用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,则将在数据丢失可能作为自动迁移一部分出现时引发异常。

 

 

 

原文地址:https://www.cnblogs.com/mmcmmc/p/3833265.html