1. 为了演示方便,首先新建一个控制台项目,然后添加对entityframework的引用

使用nuget控制台执行: Install-Package EntityFramework

2.新建一个实体“Student”,数据访问类“StudentsContext”,代码如下:

public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
public class StudentsContext:DbContext
{
public DbSet<Student> Students { get; set; } }

3.启用数据迁移。

3.1 打开nuget控制台,执行如下命令:

Enable-Migrations

执行此命令之后,项目中会自动添加一个文件夹“Migrations”,并且会自动生成一个数据迁移配置文件“Configuration.cs”。如果此时之前已经访问过“StudentsContext”,还会在此文件夹下生成一个初始化的迁移文件“xxxxx_InitialCreate.cs”,xxxx是执行命令时的日期序号。(当然我这里还没有访问过“StudentsContext”,所以没有生成该文件)如下图:

3.2 添加数据迁移。

打开nuget控制台,执行如下命令(如果在此之前,数据库已经生成并使用过了,那么此命令会在启用迁移的时候默认执行过了,所以不必再执行。见3.1文字信息):

Add-Migration InitialCreate

执行此命令后,会在“Migrations”文件夹下生成一个初始化的迁移文件“xxxxx_InitialCreate.cs”。每个迁移文件都包含Up和Down两个重写函数,分别对应于更新和回退。上面的代码也很直白,Up函数中创建一个Students表并定义了表结构,Down函数用来回退操作,里面简单的删除了Students表。如下:

 using System.Data.Entity.Migrations;

     public partial class InitialCreate : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.Students",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(),
})
.PrimaryKey(t => t.Id); } public override void Down()
{
DropTable("dbo.Students");
}
}

3.3 添加数据迁移。

3.3.1 修改“Student”类,改成如下结构:

public class Student
{
public int Id { get; set; }
[MaxLength()]
public string Name { get; set; }
public int Age { get; set; }
}

3.3.2 然后在nuget命令控制台执行如下代码,添加一个数据迁移项:

Add-Migration Add_Student_Name_Age

执行命令后,会在“Migrations”文件夹下生成一个名为“xxxx_Add_Student_Name_Age.cs”的数据迁移文件,文件的内容就是刚才对实体更改的记录。如下:

public partial class Add_Student_Name_Age : DbMigration
{
public override void Up()
{
AddColumn("dbo.Students", "Age", c => c.Int(nullable: false));
AlterColumn("dbo.Students", "Name", c => c.String(maxLength: ));
} public override void Down()
{
AlterColumn("dbo.Students", "Name", c => c.String());
DropColumn("dbo.Students", "Age");
}
}

3.3.3 执行迁移计划。打开nuget控制台,执行如下命令:

update-database

到此,第一次数据迁移已经完成了,打开数据表“Students”就回发现,刚才做的更改已经执行并生效了。

3.4 生成数据迁移脚本文件

在真实环境中数据库可能是部署在远程服务器的,所以可以生成数据迁移脚本文件,然后去远程服务器执行。在nuget控制台执行如下命令:

Update-Database -Script -SourceMigration: InitialCreate -TargetMigration: Add_Student_Name_Age

执行命令后,会得到一个脚本文件,如下:

ALTER TABLE [dbo].[Students] ADD [Age] [int] NOT NULL DEFAULT 0
ALTER TABLE [dbo].[Students] ALTER COLUMN [Name] [nvarchar](20) NULL
INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion])
VALUES (N'201612300600368_Add_Student_Name_Age', N'EfCodeFirstMigrations.Migrations.Configuration', 0x1F8B0800000000000400CD57DB6EDB38107D5F60FF81E0736AC6CE4B37905B649D6411B44E822AED3B2D8D146229522B5281FD6DFBB09FD45FE8507753BE25288A450023A666CE9C399A0BFDFDDFFF828FEB4C9217288CD06A4EA793734A40453A162A9DD3D226EFDED38F1F7EFF2DB889B335F9D6DA5D383BF454664E9FADCD2F1933D13364DC4C321115DAE8C44E229D311E6B363B3FFF834DA70C1082221621C19752599141F505BF2EB48A20B725974B1D8334CD393E092B5472CF3330398F604E6F9205DADC8AC2D8A5480B6E919099D47E945C49C191530832A1842BA56D6570F9D540680BADD230C7032E9F3639A05DC2A5812693CBDEFCD4A4CE672E29D63BB6505169ACCE5E0938BD685462BEFB9BB4A69D8AA8E30DEA6D372EEB4A4B54C89631284B891FEB72210B677758E949E37F46765A9D75A58215E5FECEC8A294B62C60AEA0B4059767E4B15C49117D82CD93FE1BD45C95520E2923697CB67580478F85CEA1B09B2F903489DCC594B06D3FE63B766E039F3AC73B652F6694DC6370BE92D055C4408FD0EA02FE0205981BC48FDC5A2894C3804AD351742F96FB6CA36109625F51B2E4EBCFA052FB3CA7336CA45BB186B83D68087C5502BB107D6C51C2B11857291C4B680810B0BE1CC64582CD68B9C074B72BC5B87358EFAA186CAEA6684CC3779B6D8D1B82F51029E979D43D3BE9CA7217DF8E593F1F583D20DA41C2F64C9260C9F31CA51F4C96E68484F55859BC0B5FDF65598DC122B3A3D93AB65D242C249E82F71443B7FD73CD2D5F71F7B616713632F3DFC31E8DDB689ED47E23F5CAB70EEEFFDAE994C6F7017B456F31C90C2DAA7CA1E3D58F9C916735E7B9E4C58E365D6859666A5FAB1FF2AE1B6FE85F9F9C8E50B5D510A03A18FB07CC4BDD179B8DD4F60696FFF60E15BF6FD245EF9AC02BF6A029BCE3BB755489B5092528CC8B88AB2ADC180BD9C4194CC27FE4428AAA5D5B832557220163EB998ED36D3AF396F2FF674132636279DA96FCE57B4938518F6E9E8353FEF02A522FBC889E79315A463DE62B374F45F927EE9DF1583C69AB1C5A2A7539CF69BCD2C8BAE6D92FA337AE9C7177056C78BF0DAEC188B48770B75D05912BDB1EB4B5B953896E25C6D4868C5A13EF0D2CC1F21815BA2AAC487864F17104C654F78C6F5C966E9E672B88EFD44369F3D25E1903D94A6EDD5B0276387EB557B739070F79B5167E460A4853600AF0A0FE2C858C3BDEB73B4A680F842B96A6539015DEB3102EDD7448F75A9D08D4C8770D392857174F90E512C1CC830AF90BBC851B5E8F3E43CAA34D3B24F7831C7F11DBB207D782E382CE4C83D1FBBBDF6CCCFD68FBF003592E236AE60D0000 , N'6.1.3-40302')

有了这个脚本文件,就可以很方便的执行数据迁移了。

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

  1. Entity Framework Code First -- Migrations 迁移

    在开始使用迁移(Migrations)之前,我们需要一个 Project 和一个 Code First Model, 对于本文将使用典型的 Blog 和 Post 模型 创建一个新的控制台应用程序 M ...

  2. Entity Framework Code First 数据迁移

    需要在[工具 --> NuGet 程序包管理器 --> 程序包管理器控制台]中输入三个命令: Enable-Migrations (初次迁移时使用) Add-Migration [为本次迁 ...

  3. How to: Use the Entity Framework Code First in XAF 如何:在 XAF 中使用EF CodeFirst

    This topic demonstrates how to create a simple XAF application with a business model in a DbContext ...

  4. Entity Framework Code first(转载)

    一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...

  5. Entity Framework Code First学习系列目录

    Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...

  6. Entity Framework Code First学习系列

    Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity ...

  7. 使用 Entity Framework Code First

    使用 Entity Framework Code First 在家闲着也是闲着,继续写我的[ASP.NET MVC 小牛之路]系列吧.在该系列的上一篇博文中,在显示书本信息列表的时候,我们是在程序代码 ...

  8. Entity Framework Code First 迁移

    Entity Framework CodeFirst数据迁移 http://www.cnblogs.com/aehyok/p/3325459.html Entity Framework Code Fi ...

  9. Entity Framework与ADO.NET批量插入数据性能测试

    Entity Framework是.NET平台下的一种简单易用的ORM框架,它既便于Domain Model和持久层的OO设计,也提高了代码的可维护性.但在使用中发现,有几类业务场景是EF不太擅长的, ...

  10. Entity Framework Code First数据库连接

    1. 安装Entity Framework 使用NuGet安装Entity Framework程序包:工具->库程序包管理器->程序包管理器控制台,执行以下语句: PM> Insta ...

随机推荐

  1. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  2. ES6(块级作用域)

    我们都知道在javascript里是没有块级作用域的,而ES6添加了块级作用域,块级作用域能带来什么好处呢?为什么会添加这个功能呢?那就得了解ES5没有块级作用域时出现了哪些问题. ES5在没有块级作 ...

  3. 图解Spark API

    初识spark,需要对其API有熟悉的了解才能方便开发上层应用.本文用图形的方式直观表达相关API的工作特点,并提供了解新的API接口使用的方法.例子代码全部使用python实现. 1. 数据源准备 ...

  4. windows charles response 乱码解决办法

    使用windows 版本的charles来做代理,发现服务端返回的response会出现中文乱码的情况, 查看软件设置,遗憾的是并没有关于编码的选项. 好在charles windows版本安装目录下 ...

  5. Linux系统中的Device Mapper学习

    在linux系统中你使用一些命令时(例如nmon.iostat 如下截图所示),有可能会看到一些名字为dm-xx的设备,那么这些设备到底是什么设备呢,跟磁盘有什么关系呢?以前不了解的时候,我也很纳闷. ...

  6. Struts2数据校验

    Struts2数据校验 1.常见数据校验方法 表单数据的校验方式: 表单中的数据必须被效验以后才能够被使用,常用的效验方式分为两种: 前台校验:也称之为客户端效验,主要是通过JS编程的方式进行表单数据 ...

  7. python_单元测试unittest

    Python自带一个单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 步骤1:首先引入unittest模块--import un ...

  8. java中文乱码解决之道(九)-----总结

    乱码,我们前台展示的杀手,可能有些朋友和我的经历一样:遇到乱码先按照自己的经验来解决,如果没有解决就google,运气好一搜就可以解决,运气不好可能够你折腾一番了.LZ之所以写这个系列博客就是因为遇到 ...

  9. 系统中没有邮件客户端设置autoLink=email会挂掉的问题

    TextView的autoLink属性为我们提供了很大的便利性,当文本中有网址,邮箱或电话的时候可以让我们方便地执行打电话发邮件等动作,不过也有一些问题,比如说设置autoLink包含email属性, ...

  10. 让你在PC上调试Web App,UC浏览器发布开发者版

    目前,在手机上使用浏览器访问网页,无法便捷地进行网页语言调试.手机屏幕相对较小且操作不便,直接在手机上进行网页数据调试不太现实. 因此,UC使用技术将手机网页调试信息分离,实现一种能在大屏幕.高配置P ...