EntityFramework CodeFirst 数据库迁移
参考:
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 数据库迁移的更多相关文章
- 在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移
在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移 最近发布的ASP.NET MVC 5 及Visual ...
- .Net Core建站(2):EF Core+CodeFirst数据库迁移
上一篇的话,说了下怎么使用EF7 实现 CodeFirst去生成数据库, 其实还有好多问题的,这次一点一点的解决吧,都挺简单,不过零零散散的,, 1.读取配置文件,获得链接字符串 2.使用数据库进行增 ...
- CodeFirst数据库迁移小记
打开“程序包管理器控制台”菜单项一.Enable-Migrations -ContextTypeName Code_First_数据迁移.Models.T_DbContext成功后提示:已在项目“Co ...
- 2.EF中 Code-First 方式的数据库迁移
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...
- EF架构~CodeFirst数据迁移与防数据库删除
回到目录 本文介绍两个概念,防数据库自动删除,这是由于在code first模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的, ...
- asp.net mvc CodeFirst模式数据库迁移步骤
利用Code First模式构建好基本的类后,项目也开始搭建完毕并成功运行,而且已经将数据库表结构自动生成了. 但是,我有新的类要加入,有字段需要修改,那怎么办呢,删库,跑路 ? 哈哈 利用数据库迁 ...
- 万水千山ABP - 系统发布后迁移 CodeFirst 数据库[原创]
在项目开发的过程中,常会遇到项目发布后还变更数据库的情况.这时如何方便地进行数据库迁移呢 ? 下面直接列出操作的步骤: 1. 发布修改后的应用: 将最新版本的应用更新到目标机器中.更新的文件当然不包括 ...
- C# EntityFramework Code First 迁移 降级 回退到空数据库
C# EntityFramework Code First 迁移 降级 回退到空数据库 1.包管理器控制台-迁移 在包管理器控制台中运行 Enable-Migrations Add-Migratio ...
- EF CodeFirst系列(9)---添加初始化数据和数据库迁移策略
1.添加初始化数据(Seed) 我们可以在初始化数据库的过程中给数据库添加一些数据.为了实现初始化数据(seed data)我们必须创建一个自定义的数据库初始化器(DB initializer),并重 ...
随机推荐
- c++ 指向类成员函数的函数指针
// ConsoleApplication34.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...
- Linux系统获取CPU温度
Linux系统获取CPU温度 摘自:https://jingyan.baidu.com/article/cbf0e500407d072eab289343.html 各位好,本篇将简单介绍如何在不同系列 ...
- javascript中把一个数组的内容全部赋值给另外一个数组
如:var a = [1,2,3,4];var b= [];b = a;这个不是把值赋值过去而是b作为a的引用,b改变的是a如何b指向的是一个新数组,a把元素值全部赋值过去? 1.普通数组可以使用 ...
- What is difference between 3-layer architecture and MVC architecture?
By Vikas Singh on Sep 26, 2014 In 3-layer architecture 3-layer architecture separates the applicati ...
- JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(7):装配SpringBean·依赖注入装配
一.依赖注入的三种方式 在实际环境中实现IoC容器的方式主要分为两大类,一类是依赖查找,依赖查找是通过资源定位,把对应的资源查找回来.另一类则是依赖注入.一般而言,依赖注入可分为3中方式: ...
- (转)Asp.net页面生命周期详解任我行(1)-小试牛刀,编写页面代码
原文地址:http://www.cnblogs.com/xuyubing/archive/2013/10/01/3348344.html 前言 很久很久以前,还是我在学校的时候,我就看了传智里面视频, ...
- JS Img对象获取图片高度宽度(兼容Chrome)
一般获取图片高度宽度的写法: var img = new Image();img.src = imgsrc;var imgWH = CalcImgTiple(img.width, img.height ...
- ipmitool批量添加新用户名和密码
Intelligent Platform Management Interface 需求:已知BMC帐号id2为root管理员帐号,添加id5bmc帐号 工具:ipmitool version 1.8 ...
- android和.net webservice中的DES加密算法
也是看了一堆的例子,本身并不会写加密算法,好在只要会用就行了,我们把在app中使用的参数加密,然后在.net端的webservice中进行解密,本身并没有什么问题,但是android下和.net下的d ...
- SQL server T-sql语句查询执行顺序
前言 数据库的查询执行,毋庸置疑是程序员必备的技能之一,然而数据库查询执行的过程绚烂多彩,却是很少被人了解,今天我们来深入了解下sql查询的来龙去脉,为查询的性能优化打个基础 这篇博客,摒弃查询优化性 ...