参考:

https://msdn.microsoft.com/en-us/data/jj591621

https://msdn.microsoft.com/en-us/library/dd394698#efcfmigrations

http://www.itnose.net/detail/6105449.html

http://www.tuicool.com/articles/Q7JRR32

打开:工具 --> NuGet包管理器 --> 程序包管理控制台,按下面的步骤使用相应的命令

//使能迁移功能

命令1. Enable-Migrations -ContextTypeName WebTest.Models.TestDbContext -MigrationsDirectory MigrationsTestDbContext

(Enable-Migrations -ContextTypeName 数据库上下文名称(使用完全限定名,即包含名称空间) -MigrationsDirectory 文件夹名称)

(此命令支持包含多个数据库上下文的项目,将为每个数据库上下文创建独立的文件夹)

//添加迁移数据快照

命令2. Add-Migration -configuration WebTest.MigrationsTestDbContext.Configuration InitialCreate

(Add-Migration -configuration 要使用的配置名称(使用完全限定名) 自定义的快照名称(自动添加一个时间戳前缀))

(模型类发生改变后,使用此命令添加迁移快照,其中第一次使用时(未创建数据库时)一般使用“InitialCreate”命名)

//更新数据库,将迁移快照应用于数据库

命令3. Update-Database -configuration WebTest.MigrationsTestDbContext.Configuration -Verbose

(Update-Database -configuration 要使用的配置名称(使用完全限定名) -Verbose(可选,显示详细信息,生成的sql语句))

//回退数据库

命令4. Update-Database -ProjectName:WebTest -TargetMigration:"201706291258382_InitialCreate" -verbose

//不直接应用到数据库,而是生成sql脚本文件

命令5. Update-Database -ConfigurationTypeName WebTest2.MigrationsTemplateDbContext.Configuration -TargetMigration:"201708010715588_InitialCreate" -Script

注:可以对相应的数据库执行sql脚本以应用数据库结构修改,对已经投入运营的项目灵活性更高,

比如项目中一个模型多个数据库,数据库连接字符串动态生成的情况,可以在本地创建一个模板数据库,专门用于生成sql脚本,再使用 SQL Server Management Studio  等工具对已发布的数据库执行sql脚本完成数据结构升级。

(业务数据库上下文的构造函数可以使用:public TestDbContext(string nameOrConnectionString) : base(nameOrConnectionString){} ,

模板数据库可以继承业务数据库,然后在构造函数指定连接字符串名称:public TemplateDbContext() : base("TemplateDb"){})

一般步骤:

1.   设置连接字符串,创建模型类

2.   编译项目

3.   使用命令1开启迁移功能

4.   编译项目

5.   使用命令2添加初始化快照

6.   编译项目

7.   使用命令3,将自动创建数据库,至此数据库初始化完成

8.   当业务调整,数据库需要修改时,修改模型类

9.   编译项目

10. 使用命令2添加迁移快照(最好使用有意义的名称,比如"AddTestBsTable")

11. 编译项目

12. 使用命令3更新数据库,将在保留原数据的情况下升级数据库架构,使数据库架构与最新的模型保持一致

//其它

//获取帮助
get-help Enable-Migrations
//获取示例
get-help Enable-Migrations -examples
//获取帮助
get-help Add-Migration -full

//如果出现 Apply the pending explicit migrations before attempting to generate a new explicit migration. 错误,表示有挂起的迁移操作未执行,此时可以先将上一次的快照(如:"201706291123246_InitialCreate.cs")中的 Up() 方法内的代码全部注释掉,再运行一次update-database,就是什么也不做,单纯执行完挂起的migration。

//对已经发布在服务器上的网站应用数据库迁移

如下图所示,在web发布选项中勾选 "执行 Code First 迁移 (在应用程序启动时运行)"

EntityFramework CodeFirst 数据库迁移的更多相关文章

  1. 在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移

    在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移 最近发布的ASP.NET MVC 5 及Visual ...

  2. .Net Core建站(2):EF Core+CodeFirst数据库迁移

    上一篇的话,说了下怎么使用EF7 实现 CodeFirst去生成数据库, 其实还有好多问题的,这次一点一点的解决吧,都挺简单,不过零零散散的,, 1.读取配置文件,获得链接字符串 2.使用数据库进行增 ...

  3. CodeFirst数据库迁移小记

    打开“程序包管理器控制台”菜单项一.Enable-Migrations -ContextTypeName Code_First_数据迁移.Models.T_DbContext成功后提示:已在项目“Co ...

  4. 2.EF中 Code-First 方式的数据库迁移

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...

  5. EF架构~CodeFirst数据迁移与防数据库删除

    回到目录 本文介绍两个概念,防数据库自动删除,这是由于在code first模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的, ...

  6. asp.net mvc CodeFirst模式数据库迁移步骤

    利用Code First模式构建好基本的类后,项目也开始搭建完毕并成功运行,而且已经将数据库表结构自动生成了. 但是,我有新的类要加入,有字段需要修改,那怎么办呢,删库,跑路 ?  哈哈 利用数据库迁 ...

  7. 万水千山ABP - 系统发布后迁移 CodeFirst 数据库[原创]

    在项目开发的过程中,常会遇到项目发布后还变更数据库的情况.这时如何方便地进行数据库迁移呢 ? 下面直接列出操作的步骤: 1. 发布修改后的应用: 将最新版本的应用更新到目标机器中.更新的文件当然不包括 ...

  8. C# EntityFramework Code First 迁移 降级 回退到空数据库

    C# EntityFramework  Code First 迁移 降级 回退到空数据库 1.包管理器控制台-迁移 在包管理器控制台中运行 Enable-Migrations Add-Migratio ...

  9. EF CodeFirst系列(9)---添加初始化数据和数据库迁移策略

    1.添加初始化数据(Seed) 我们可以在初始化数据库的过程中给数据库添加一些数据.为了实现初始化数据(seed data)我们必须创建一个自定义的数据库初始化器(DB initializer),并重 ...

随机推荐

  1. float在内存中的存取方法

    今天做了一些题目,想到float数据如何在内存中的形式.不知道一个浮点数是如何存成32位01字符串的.下面是查找的一些资料. 我们先通过java获取这些数的二进制表示. public class De ...

  2. CSS 中的 px、em、rem 和 vh

    区分 px:Pixel.像素. em:相对长度单位.继承父级元素的 font-size,值是相对于父级元素font-size的倍数. rem:Root em.相对于根元素(即 <html> ...

  3. docker搭建gitbook服务

    Gitbook Gitbook简介 GitBook 是一个基于 Node.js 的命令行工具,可使用 Github/Git 和 Markdown 来制作精美的电子书,GitBook 并非关于 Git ...

  4. GitHub小技巧-定义项目语言

    GitHub是根据项目里文件数目最多的文件类型,识别项目类型.后端项目难免会包含前端的资源,有时候就会被标记成前端语言,因为项目里 css 等文件比较多, 被误识别成css项目. GitHub不提供指 ...

  5. angular学习文章

    https://www.jianshu.com/p/86c6249a2069 angular.cn https://segmentfault.com/a/1190000008754631

  6. 安装Xamarin.Android几个经典介面

    昨晚Microsoft MVP的身份来申请Xamarin.Android,想不到今早就有邮件回复.花上些少时间订阅与注册: 望有时间能学习到一些新技术. 下面是Insus.NET下载并安装,留下几个经 ...

  7. OO 抽象类与接口的区别

    抽象类与接口的区别 抽象类与接口的区别 一.抽象类:(抽象类适用于同一系列,并且有需要继承的成员) 概念: 1.使用abstract修饰: 2.抽象类中可以包含抽象方法: 3.抽象类只能被子类继承:( ...

  8. 扩展卢卡斯定理(Exlucas)

    题目链接 戳我 前置知识 中国剩余定理(crt)或扩展中国剩余定理(excrt) 乘法逆元 组合数的基本运用 扩展欧几里得(exgcd) 说实话Lucas真的和这个没有什么太大的关系,但是Lucas还 ...

  9. linux 改变系统时间

    date  查看系统时间 date -s 04/05/16  日期设置成2016年4月5日 date -s 15:03:32  日期设置成2016年4月5日15:03:32 上述两步可以直接写成这样一 ...

  10. 渗透测试工具实战技巧 (转载freebuf)

    最好的 NMAP 扫描策略 # 适用所有大小网络最好的 nmap 扫描策略 # 主机发现,生成存活主机列表 $ nmap -sn -T4 -oG Discovery.gnmap 192.168.56. ...