EF Code First Migrations数据库迁移

一、EF Code First建立数据库数据库

  新建控制台应用程序Portal,经过程序包管理器控制台添加EntityFramework。app

  在程序包管理器控制台中执行如下语句,安装EntityFramework。ide

  PM> Install-Package EntityFramework函数

 

  安装成功后,界面提示以下图:ui

  

  在新建的Portal控制台应用程序中添加两个实体类,代码结构以下:spa

  

  其中,类文件PortalContext.cs的代码以下:3d

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Entity; using System.Data.Entity.Infrastructure; using Portal.Entities; using Portal.Mapping; namespace Portal { public class PortalContext : DbContext { static PortalContext() { Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PortalContext>()); } public DbSet<Province> Provinces { get; set; } public DbSet<Category> Categories { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new ProvinceMap()); modelBuilder.Configurations.Add(new CategoryMap()); } } }

  在静态构造函数中,设置了当数据库模型发生改变时,则删除当前数据库,重建新的数据库。code

  代码执行后,生成的数据库:blog

  

二、EF Code First数据库迁移ip

2.一、生成数据库

  修改类文件PortalContext.cs的静态构造函数,取消当数据库模型发生改变时删除当前数据库重建新数据库的设置。

  

static PortalContext() { Database.SetInitializer<PortalContext>(null); }

  1>、在程序包管理器控制台,执行语句:

  PM> Enable-Migrations -EnableAutomaticMigrations

  

  执行成功后,Portal控制台应用程序代码结构中,添加Migrations文件夹,并生成类文件Configuration.cs。

  

  

namespace Portal.Migrations { using System; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Linq; internal sealed class Configuration : DbMigrationsConfiguration<Portal.PortalContext> { public Configuration() { AutomaticMigrationsEnabled = true; } protected override void Seed(Portal.PortalContext context) { // This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. E.g. //
            // context.People.AddOrUpdate( // p => p.FullName, // new Person { FullName = "Andrew Peters" }, // new Person { FullName = "Brice Lambson" }, // new Person { FullName = "Rowan Miller" } // ); //  } } }

  2>、在程序包管理器控制台,执行语句:

  PM> Add-Migration InitialCreate

  

  执行成功后,在Migrations文件夹中新增类文件201309201556388_InitialCreate.cs

  

  3>、在程序包管理器控制台,执行语句:

  PM> Update-Database -Verbose

  执行结果生成与上面一致的数据库

  

  4>、在数据库模型中添加City类,执行程序包管理器控制台语句,Migrations文件夹中新增类文件201309201643300_AddCity.cs。

  PM> Add-Migration AddCity

  再次执行程序包管理器控制台语句

  PM> Update-Database -Verbose

  

  Portal控制台应用程序的代码结构:

  

  数据库更新成功以后,在数据库中新增表City。

  

  

2.二、版本回溯

  修改数据库中表City,删除其中字段ProvinceNo。在程序包管理器控制台中执行如下两条语句:

  PM> Add-Migration ModifyCity

  PM> Update-Database -Verbose

  执行成功以后,City表结构修改成:

  

  执行程序包管理器控制台语句,进行数据库版本回溯。

  PM> Update-Database –TargetMigration:"201309201643300_AddCity.cs"

2.三、生成数据库版本之间的Sql脚本

  执行程序包管理器控制台语句,生成数据库版本之间的Sql脚本。该操做仅为生成Sql语句,并未在数据库中进行执行。

  Update-Database -Script -SourceMigration:"201309201643300_AddCity.cs" -TargetMigration:"201309201708043_ModifyCity.cs"

  其中-TargetMigration在未指定的状况,默认为迁移到最新的版本。

三、EF Code First Migrations语句的其余参数

  1>、为指定的DbContext启用数据库迁移

  PM> Enable-Migrations -ContextTypeName Portal.PortalContext

  2>、设置是否容许自动迁移

  Enable-Migrations

  生成的Configuration.cs类文件的构造函数

public Configuration() { AutomaticMigrationsEnabled = false; }

  3>、Enable-Migrations指定项目名称

  PM> Enable-Migrations -StartUpProjectName Portal

  若是在“Package Manager Console”中选择了默认项目能够不设置“-StartUpProjectName”参数;若是屡次执行此命令能够添加-Force参数。

  4>、查看所执行的Sql语句 -Verbose指令

  Update-Database -Verbose

五、参考资料

  http://msdn.microsoft.com/en-US/data/jj591621

相关文章
相关标签/搜索