Entity Framework Code First Migrations--EF 的数据迁移

摘要:
见3.1文字信息):Add-MigrationInitialCreate执行此命令后,会在“Migrations”文件夹下生成一个初始化的迁移文件“xxxxx_InitialCreate.cs”。如下:1usingSystem.Data.Entity.Migrations;23publicpartialclassInitialCreate:DbMigration4{5publicoverridevoidUp()6{7CreateTable14.PrimaryKey;1516}1718publicoverridevoidDown()19{20DropTable;21}22}ViewCode3.3添加数据迁移。

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

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

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

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

3.启用数据迁移。

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

Enable-Migrations

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

Entity Framework Code First Migrations--EF 的数据迁移第1张

3.2 添加数据迁移。

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

Add-Migration InitialCreate

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

Entity Framework Code First Migrations--EF 的数据迁移第2张Entity Framework Code First Migrations--EF 的数据迁移第3张
1 usingSystem.Data.Entity.Migrations;
2     
3     public partial classInitialCreate : DbMigration
4 {
5         public override voidUp()
6 {
7 CreateTable(
8                 "dbo.Students",
9                 c => new
10 {
11                         Id = c.Int(nullable: false, identity: true),
12                         Name =c.String(),
13 })
14                 .PrimaryKey(t =>t.Id);
15             
16 }
17         
18         public override voidDown()
19 {
20             DropTable("dbo.Students");
21 }
22     }
View Code

3.3 添加数据迁移。

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

public classStudent
    {
        public int Id { get; set; }
        [MaxLength(20)]
        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”的数据迁移文件,文件的内容就是刚才对实体更改的记录。如下:

Entity Framework Code First Migrations--EF 的数据迁移第2张Entity Framework Code First Migrations--EF 的数据迁移第5张
public partial classAdd_Student_Name_Age : DbMigration
    {
        public override voidUp()
        {
            AddColumn("dbo.Students", "Age", c => c.Int(nullable: false));
            AlterColumn("dbo.Students", "Name", c => c.String(maxLength: 20));
        }
        public override voidDown()
        {
            AlterColumn("dbo.Students", "Name", c =>c.String());
            DropColumn("dbo.Students", "Age");
        }
    }
View Code

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 的数据迁移》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇php批量上传图片并把图片名放入数据库Basic语言开发笔记:Basic语言介绍、环境搭建、基本语法示例与程序实例下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用控制台导入大数据量的sql文件来提高效率

首先要使用控制台删除所想要操作的数据库, 重新建库并使用utf8编码,命令为: create database thams charset utf8; 第二部,导入sql文件,命令为: mysql -uroot -pziguangruanjian --default-character-set=utf8 thams < d: hams.sql 其中,...

Eclipse控制台输出信息的控制(引用其他人的博客)

当你在Eclipse中 running/debugging一个应用程序的时候,有关该应用程序的运行调试信息及日志信息都会输出到控制台(console )显示,但是Eclipse只会显示最后一部分的日志信息,如果你的应用程序会产生大量的运行调试信息及日志信息,你可能会想保持这些信息到文件中,以便查看分析。 有三种方法仅供参考: (1)、我们可以设置Ecli...

Weblogic的安装、配置与应用部署

1. Weblogic安装 1.1 Linux下安装过程 安装环境: 操作系统: redhat-release-5Server-5.4.0.3 Weblogic版本: Weblogic 9.24 1)       部署前准备: 创建weblogic用户组. groupadd weblogic useradd –g weblogic weblogic pas...

Cacti数据备份与数据迁移还原

简介:部署了一台备用cacti监控服务器,需要将原cacti监控服务器的数据迁移到新的监控主机上去,实现监控数据双重同步备份。 cacti数据是由mysql数据(主要保存设备配置信息、用户信息等)和rra数据(环状数据库,没有起点和终点,存储监控数据信息;加载速度比mysql数据库快)。因此只需要将这两部分数据备份再恢复到新部署的cacti即可。...

Linux下启动Tomcat启动并显示控制台日志信息

Linux下如何启动Tomcat像Windows启动并显示控制台日志信息一样? Windows下启动tomcat,一般直接运行startup.bat,启动后如下图所示: Linux下直接启动./startup.sh但是查看不到启动日志信息,通过ps –ef|grep tomcat查看,实际已经启动,如下图所示: 但是可以通过运行./catalina.s...

火狐的调试利器Firebug

每次分享例会同事的分享都会让我学习到很多知识,因为我的基础比较差。所以对很多东西都不熟悉。     今天的分享例会主题是关于Firebug的运用,或许对很多同事来说,这些都不是新知识,但是对我来说我必须得好好总结一下今天所学的知识。     1.什么是Firebug:     Firebug 是网页浏览器 Mozilla Firefox 下的一款开发类插...