【EF】EF Code-First数据迁移

Code-First数据迁移 

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

新建MVC 4项目MvcMigrationDemo

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

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.ComponentModel.DataAnnotations;
 6 using System.ComponentModel.DataAnnotations.Schema;
 7
 8 namespace MvcMigrationDemo.Models
 9 {
10     public class Person
11     {
12         [Key]
13         public int PersonID { get; set; }
14
15         [Required]
16         [MaxLength(20)]
17         public string PersonName { get; set; }
18
19         public virtual Department Departmant { get; set; }
20
21     }
22 }
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.ComponentModel.DataAnnotations;
 6 using System.ComponentModel.DataAnnotations.Schema;
 7
 8 namespace MvcMigrationDemo.Models
 9 {
10     public class Department
11     {
12         [Key]
13         public int DeptID { get; set; }
14
15         [Required]
16         [MaxLength(200)]
17         public string DeptName { get; set; }
18
19         public ICollection<Person> Persons { get; set; }
20     }
21 }

添加控制器 PersonController

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

调试,网址输入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字段

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.ComponentModel.DataAnnotations;
 6 using System.ComponentModel.DataAnnotations.Schema;
 7
 8 namespace MvcMigrationDemo.Models
 9 {
10     public class Department
11     {
12         [Key]
13         public int DeptID { get; set; }
14
15         [Required]
16         [MaxLength(200)]
17         public string DeptName { get; set; }
18
19         [MaxLength(4000)]
20         public string About { get; set; }
21
22         public ICollection<Person> Persons { get; set; }
23     }
24 }

在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

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

时间: 2024-10-25 08:01:22

【EF】EF Code-First数据迁移的相关文章

20.1翻译系列:EF 6中自动数据迁移技术【EF 6 Code-First系列】

原文链接:https://www.entityframeworktutorial.net/code-first/automated-migration-in-code-first.aspx EF 6 Code-First系列文章目录: 1 翻译系列:什么是Code First(EF 6 Code First 系列) 2.翻译系列:为EF Code-First设置开发环境(EF 6 Code-First系列) 3.翻译系列:EF Code-First 示例(EF 6 Code-First系列) 4

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

在使用Code first生成数据库后 当数据库发生更改时 运行程序就会出现数据已更改的问题  这时可以删除数据库重新生成解决 但是之前的数据就无法保留  为了保留之前的数据库数据  我们需要使用到Code first数据迁移 首先如果需要更改数据结构  必须是先更改model类 然后使用Code firs数据迁移  如果直接先更改了数据库 则使用数据迁移会报错 使用Code firs数据迁移图解 工具-->库文件包程序管理器-->程序包管理控制台  如图 注意观察 默认项目  和程序包源 因

Code First 数据迁移 转

一.为模型更改设置 Code First 数据迁移 1.工具—>库程序包管理器—>程序包管理器控制台—>输入“Enable-Migrations”  或者 Enable-Migrations -ContextTypeName Mvc.Models.DataContext Enable-Migrations -ContextTypeName 命名空间.上下文名称 注:如果正确的话 则显示“已为项目 xxx启用 Code First 迁移.”, Enable-Migrations命令创建了一

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

转自:http://www.cnblogs.com/icyJ/p/migration.html 准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-package EntityFramework  //安装EF环境 2.在项目下新建类(Paper),也就是code first中的code.建好之后,Ctrl+Shift+B生成项目.(不生成的话,会出现控制器找不到类型或者其他报错) 3.在app.config或web.config的configuration

EF code First数据迁移学习笔记

准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-package EntityFramework  //安装EF环境 2.在项目下新建类(Paper),也就是code first中的code.建好之后,Ctrl+Shift+B生成项目.(不生成的话,会出现控制器找不到类型或者其他报错) 3.在app.config或web.config的configuration下添加节点connectionStrings: <connectionStrings>

C#+EntityFramework编程方式详细之Code First 数据迁移

在前几篇的C#+EntityFramework编程方式中介绍了C#+EntityFramework编程方式Code First ,Model First以及Dtatabase First 等编程方式,其中Model First以及Dtatabase First中,如果实体类(Model First)或者数据库(Dtatabase First)变化了,那么就需要数据库(Model First)或者实体类(Dtatabase First)来相应的变化,以保持实体类(Model First)和数据库(

EF Code First 数据迁移

背景: EF Code First在经历新业务或者业务逻辑变更时,可能会遇到数据库的更改,比如新增表 ,更改表加字段,等等.这个时候,删除原来的数据库重建会丢失数据. 方案1: 如果初次开发,可以选择删除重建. 代码: public TestDbContext() : base("Name=TestConnection") { Database.SetInitializer<TestDbContext>(new DropCreateDatabaseIfModelChange

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

PM> add-migration 20161109正在为迁移“20161109”搭建基架.此迁移文件的设计器代码包含当前 Code First 模型的快照.在下一次搭建迁移基架时,将使用此快照计算对模型的更改.如果对要包含在此迁移中的模型进行其他更改,则您可通过再次运行“Add-Migration 20161109”重新搭建基架.PM> update-database指定“-Verbose”标志以查看应用于目标数据库的 SQL 语句.正在应用显式迁移: [201611090641341_20

EntityFramework4.3.1 Code First 数据迁移

现有数据库生成Code First 代码,先下载 Entity Framework Power Tools https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d/ 如果找不到Nuget就先安装了,在工具-扩展管理器里直接安装.(如下图) 需要通过 NuGet 的 Package Manager Console 输入相关命令. Enable-Migrations -StartUpPro

Code First数据迁移

项目上线后,需要对数据库进行改动,不能再使用DropCreateDatabaseIfModelChanges 如果手动修改了DbContext或者实体类,会出现错误: 支持“Entities”上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库. 在Package Manage Console中输入Enable-Migrations来启用迁移功能. Add-Migration will scaffold the next migration based on c