zoukankan      html  css  js  c++  java
  • 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,则将在数据丢失可能作为自动迁移一部分出现时引发异常。

     

     

     

  • 相关阅读:
    hdu1002
    hdu1008
    hdu1000
    fzu2089
    hdu1003
    hdu1004
    HDU1019
    《那些年啊,那些事——一个程序员的奋斗史》——87
    《那些年啊,那些事——一个程序员的奋斗史》——83
    《那些年啊,那些事——一个程序员的奋斗史》——89
  • 原文地址:https://www.cnblogs.com/mmcmmc/p/3833265.html
Copyright © 2011-2022 走看看