Code-First数据迁移 

首先要通过NuGet将EF升级至最新版本。

新建MVC 4项目MvcMigrationDemo

添加数据模型 Person 和 Department,定义如下:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; namespace MvcMigrationDemo.Models
{
public class Person
{
[Key]
public int PersonID { get; set; } [Required]
[MaxLength()]
public string PersonName { get; set; } public virtual Department Departmant { get; set; } }
}

Person

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; namespace MvcMigrationDemo.Models
{
public class Department
{
[Key]
public int DeptID { get; set; } [Required]
[MaxLength()]
public string DeptName { get; set; } public ICollection<Person> Persons { get; set; }
}
}

Department

添加控制器 PersonController

using System.Data.Entity;

namespace MvcMigrationDemo.Models
{
public class MvcMigrationDemoContext : DbContext
{
// 您可以向此文件中添加自定义代码。更改不会被覆盖。
//
// 如果您希望只要更改模型架构,Entity Framework
// 就会自动删除并重新生成数据库,则将以下
// 代码添加到 Global.asax 文件中的 Application_Start 方法。
// 注意: 这将在每次更改模型时销毁并重新创建数据库。
//
// System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<MvcMigrationDemo.Models.MvcMigrationDemoContext>()); public MvcMigrationDemoContext() : base("name=MvcMigrationDemoContext")
{
} public DbSet<Person> People { get; set; }
public DbSet<Department> Departments { get; set; }
}
}

MvcMigrationDemoContext

调试,网址输入http://localhost:7139/Person

登陆(localdb)\v11.0,数据库如下图:

出现新建表[dbo].[Departments]和[dbo].[People],以及系统表[dbo].[__MigrationHistory]。

其中[dbo].[__MigrationHistory]用来追踪每次数据模型异动信息,如下图

MigrationId记录版本,Model记录这次创建时的数据模型,ProductVersion代表当前EF版本。

启动数据迁移

打开程序包管理器控制台,输入Enable-Migrations指令,以MvcMigrationDemoContext为例,输入如下:

Enable-Migrations -ContextTypeName MvcMigrationDemo.Models.MvcMigrationDemoContext

运行结果如下:

查看解决方案资源管理器,如图

VS 会创建一个Migrations目录,包含两个文档201507070650021_InitialCreate和Configuration。

会发现201507070650021_InitialCreate刚好和[dbo].[__MigrationHistory].MigrationId一致,文档记录了创建本次数据模型的完整描述。

Configuration定义了数据库迁移该有的行为。

运行数据库迁移

修改Department数据模型如下:添加About字段

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; namespace MvcMigrationDemo.Models
{
public class Department
{
[Key]
public int DeptID { get; set; } [Required]
[MaxLength()]
public string DeptName { get; set; } [MaxLength()]
public string About { get; set; } public ICollection<Person> Persons { get; set; }
}
}

Department

在PM中,输入Add-Migration指令,必须带上一个版本名称,本次操作如下:

查看项目Migration目录,会发现新增文档:201507070718108_AddAbout

此时还没有对数据库做任何迁移动作,可查看数据表Department,无任何修改如图

手动添加测试数据如下图

进行迁移动作 在PM中输入Update-Database指令,本次操作如下:

更新数据库成功后,查看数据库。如下图。

到此,数据迁移完成。

附1:可通过Update-Database指令自动生成数据库迁移的T-SQL脚本,本次操作如下:Update-Database -SourceMigration 201507070650021_InitialCreate -TargetMigration 201507070718108_AddAbout -Script

附2:还原数据库  本次操作如下:Update-Database -TargetMigration 201507070650021_InitialCreate

查看此时的数据库,发现数据库已还原:

附3:本文参考自Will保哥作品

EF Code-First数据迁移的更多相关文章

  1. EF Code First 数据迁移配置

    这里我想讲清楚code first 数据迁移的两种模式,还有开发环境和生产环境数据迁移的最佳实践. 1.1 数据迁移综述 EF Code first 虽然已经有了几种不同的数据库初始化策略,但是大部分 ...

  2. EF Code First 数据迁移操作

    打开执行命令窗体 1.EF Code First创建数据库 PM> Install-Package EntityFramework 2.EF Code First数据库迁移 2.1.生成数据库 ...

  3. EF code First数据迁移学习笔记(转)

    转自:http://www.cnblogs.com/icyJ/p/migration.html 准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-pa ...

  4. EF code First数据迁移学习笔记

    准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-package EntityFramework  //安装EF环境 2.在项目下新建类(Paper) ...

  5. MVC 使用EF Code First数据迁移之添加字段

    PM> add-migration 20161109   -Force 正在为迁移“20161109”搭建基架.此迁移文件的设计器代码包含当前 Code First 模型的快照.在下一次搭建迁移 ...

  6. EF Code First 数据迁移命令

    只需要开启程序管理控制台(Package Manager Console) 然后输入  Enable-Migrations -ContextTypeName youContextdb(你的数据库上下文 ...

  7. 图文详解 解决 MVC4 Code First 数据迁移

    在使用Code first生成数据库后 当数据库发生更改时 运行程序就会出现数据已更改的问题  这时可以删除数据库重新生成解决 但是之前的数据就无法保留  为了保留之前的数据库数据  我们需要使用到C ...

  8. 解决 MVC4 Code First 数据迁移 数据库发生更改导致调试失败解决方法(二)

    文章转载自:http://www.cnblogs.com/amoniyibeizi/p/4486617.html 前几天学MVC过程中,遇到更改Model类以后,运行程序就会出现数据已更改的问题导致调 ...

  9. Code First 数据迁移 转

    一.为模型更改设置 Code First 数据迁移 1.工具—>库程序包管理器—>程序包管理器控制台—>输入“Enable-Migrations”  或者 Enable-Migrat ...

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

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

随机推荐

  1. fatal: Not a git repository (or any parent up to mount point /home)

    问题:fatal: Not a git repository (or any parent up to mount point /home) 解决:git init

  2. GO学习笔记 - 用":="实现短声明变量!

    对于Delphi程序员,":="这个符号再熟悉不过了,表示对变量赋值!在GO语言中,同样表示赋值,但是和Delphi有些不同,不同就在于不需要var变量名称了!GO语言中的&quo ...

  3. Gogland配置- 修改Go源代码tab值

    Gogland对Go源代码默认值为8个,我很不习惯,第一次遇到tab数量这么大的,于是我决定修改这个tab值! 1,点击顶部菜单“File”->"Settings". 2,在 ...

  4. 【css】—— inline-block 4px 和图片底部 2px bug

    首先我们观察一组案例: HTML结构很简单: <!DOCTYPE html> <html lang="en"> <head> <meta ...

  5. Mysql6.0连接中的几个问题 Mysql6.xx

    Mysql6.0连接中的几个问题 在最近做一些Javaweb整合时,因为我在maven官网查找的资源,使用的最新版,6.0.3,发现MySQL连接中的几个问题,总结如下: 1.Loading clas ...

  6. 移动端<meta>属性配置讲解(整理)

    meta标签,是head区的辅助标签 HTML代码如下: <meta charset="utf-8"><meta http-equiv="X-UA-Co ...

  7. Java中常用到的文件操作那些事(二)——使用POI解析Excel的两种常用方式对比

    最近生产环境有个老项目一直内存报警,不时的还出现内存泄漏,导致需要重启服务器,已经严重影响正常服务了.获取生成dump文件后,使用MAT工具进行分析,发现是其中有个Excel文件上传功能时,经常会导致 ...

  8. 基于CH340的一键下载电路

    一.CH340简介 CH340 是一个 USB 总线的转接芯片,实现 USB 转串口或者 USB 转打印口.CH340是国产芯片,应用场合居多,市场占有率很高.常用的USB转串口芯片还有CP2102. ...

  9. 2016级算法期末上机-E.中等·ModricWang's Fight with DDLs II

    1125 ModricWang's Fight with DDLs II 思路 圆内被划分部分数的计算方式如下: 圆内部的每一个交点都使得总份数增加了一:除此之外,每一根直线段最后抵达圆周时,总份数也 ...

  10. vim中常用的命令

    1.光标的命令 gg 移到第一行位置 G 移到最后一行 o       行首 $       行末 nk 向上移动n行 nj 向下移动n行 nh 向左移动n列 nl 向右移动n列 ctrl+f     ...