分享

MVC、Code First系列之一(Code First数据迁移)

 蜗牛之窝 2014-06-10

主要是3步走:

1:Enable-Migrations  -ProjectName XXX

2:add-migration -ProjectName XXX

3:update-database 




1、在vs2012工具菜单里,点击“库程序包管理器”-》程序包管理器控制台
在控制台的PM>标记后,输入“Enable-Migrations -Update-Database -ProjectName Xwb.Core.Data”
 
输出如下信息:
PM> Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDbContext
正在检查上下文的目标是否为现有数据库...
已为项目 MvcMovie 启用 Code First 迁移。

上面的Enable-Migrations命令创建了一个新的Migrations文件夹,并在该目录下创建了Configuration.cs文件。
使用Visual Studio打开Configuration.cs文件。使用以下代码替换Seed方法内容:

  1. List<Member> members = new List<Member>  
  2.                 {  
  3.                     new Member {LoginName = "admin", Password = "123456", Email = "admin@163.com", NickName = "管理员"},  
  4.                     new Member {LoginName = "sxycxwb", Password = "123456", Email = "sxycxwb@163.com", NickName = "王斌"}  
  5.                 };  
  6.             DbSet<Member> memberSet = context.Set<Member>();  
  7.             memberSet.AddOrUpdate(m => new { m.Id }, members.ToArray());  


代码先行迁移机制在每次迁移后调用Seed方法,如果存在行数据,则该方法更新现有数据,如果不存在,则该方法插入数据。

按下CTRL+SHIFT+B来生成项目(如果此处不执行此生成操作,后续的步骤会失败

2、下一步是创建DbMigration 类来初始化迁移。迁移将创建一个新的数据库,这也是在前面步骤中删除数据库文件的原因。

PM> add-migration -ProjectName Xwb.Core.Data FirstMigration
正在为迁移“FirstMigration”搭建基架。
此迁移文件的设计器代码包含当前 Code First 模型的快照。在下一次搭建迁移基架时,将使用此快照计算对模型的更改。如果对要包含在此迁移中的模型进行其他更改,则您可通过再次运行“Add-Migration 201310140747227_FirstMigration”重新搭建基架。
PM>

代码先行迁移机制在Migrations文件夹下创建另外一个类文件,文件名为时间戳+下划线+ FirstMigration.cs,例如201310140747227_FirstMigration.cs,该类包含了创建数据库架构的代码。迁移文件名预置为时间戳有助于排序。查看该文件,包含了创建Movie库表的说明。当你更新数据库时,该类将被执行,创建数据库架构。随后,Seed方法将被执行,测试数据被添加其中。


3、在程序包管理器控制台窗口,键入"update-database"命令来创建数据库和执行Seed方法。
PM> update-database -ProjectName Xwb.Core.Data
指定“-Verbose”标记以查看应用于目标数据库的 SQL 语句。
正在应用基于代码的迁移: [201310140747227_FirstMigration]。
正在应用基于代码的迁移: 201310140747227_FirstMigration。
正在运行 Seed 方法。
PM>


4、自动迁移

在生成的Configuration中做如下修改:

public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = true;
        }

①  AutomaticMigrationsEnabled:获取或设置 指示迁移数据库时是否可使用自动迁移的值。
②  AutomaticMigrationDataLossAllowed:获取或设置 指示是否可接受自动迁移期间的数据丢失的值。如果设置为false,则将在数据丢失可能作为自动迁移一部分出现时引发异常。


遇到的问题:

1.报错:无法生成显式迁移,因为以下显式迁移处于待定状态: [201310051151215_InitialCreate]。请先应用待定的显式迁移,然后再尝试生成新的显式迁移。

解决:第一次实体模型映射到数据库   update-database -ProjectName Xwb.Core.Data 

2.报错:在程序集“XXXXXX”中未找到任何迁移配置类型。(在 Visual Studio 中,您可从程序包管理器控制台使用 Enable-Migrations 命令添加迁移配置。)

解决:在enable-Migrations、update-database、Add-Migrations命令后指定迁移配置的项目名称 -ProjectName;启动项中必须包含要迁移配置类型,否则要指定要进行迁移配置类型的项目名称。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多