EF Code First Migrations数据库迁移

摘要:
  代码执行后,生成的数据库:  2、EFCodeFirst数据库迁移2.1、生成数据库  修改类文件PortalContext.cs的静态构造函数,取消当数据库模型发生改变时删除当前数据库重建新数据库的设置。  PM˃Update-Database–TargetMigration:"201309201643300_AddCity.cs"2.3、生成数据库版本之间的Sql脚本  执行程序包管理器控制台语句,生成数据库版本之间的Sql脚本。

1、EF Code First创建数据库

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

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

  PM> Install-Package EntityFramework

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

  EF Code First Migrations数据库迁移第1张

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

  EF Code First Migrations数据库迁移第2张

  其中,类文件PortalContext.cs的代码如下:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;

usingSystem.Data.Entity;
usingSystem.Data.Entity.Infrastructure;

usingPortal.Entities;
usingPortal.Mapping;

namespacePortal
{
    public classPortalContext : DbContext
    {
        staticPortalContext()
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PortalContext>());
        }

        public DbSet<Province> Provinces { get; set; }
        public DbSet<Category> Categories { get; set; }

        protected override voidOnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(newProvinceMap());
            modelBuilder.Configurations.Add(newCategoryMap());
        }
    }
}

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

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

  EF Code First Migrations数据库迁移第3张

2、EF Code First数据库迁移

2.1、生成数据库

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

  

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

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

  PM> Enable-Migrations -EnableAutomaticMigrations

  EF Code First Migrations数据库迁移第4张

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

  EF Code First Migrations数据库迁移第5张

  

namespacePortal.Migrations
{
    usingSystem;
    usingSystem.Data.Entity;
    usingSystem.Data.Entity.Migrations;
    usingSystem.Linq;

    internal sealed class Configuration : DbMigrationsConfiguration<Portal.PortalContext>{
        publicConfiguration()
        {
            AutomaticMigrationsEnabled = true;
        }

        protected override voidSeed(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

  EF Code First Migrations数据库迁移第6张

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

  EF Code First Migrations数据库迁移第7张

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

  PM> Update-Database -Verbose

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

  EF Code First Migrations数据库迁移第8张

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

  PM> Add-Migration AddCity

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

  PM> Update-Database -Verbose

  EF Code First Migrations数据库迁移第9张

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

  EF Code First Migrations数据库迁移第10张

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

  EF Code First Migrations数据库迁移第11张

  

2.2、版本回溯

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

  PM> Add-Migration ModifyCity

  PM> Update-Database -Verbose

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

  EF Code First Migrations数据库迁移第12张

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

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

2.3、生成数据库版本之间的Sql脚本

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

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

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

3、EF Code First Migrations语句的其他参数

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

  PM> Enable-Migrations -ContextTypeName Portal.PortalContext

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

  Enable-Migrations

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

publicConfiguration()
{
      AutomaticMigrationsEnabled = false;
}

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

  PM> Enable-Migrations -StartUpProjectName Portal

  如果在“Package Manager Console”中选择了默认项目可以不设置“-StartUpProjectName”参数;如果多次执行此命令可以添加-Force参数。

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

  Update-Database -Verbose

5、参考资料

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

免责声明:文章转载自《EF Code First Migrations数据库迁移》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VS2012_MVC4入门例子、代码视图分离办法、需要注意的坑爹问题等_被坑后不断更新此贴,要转载的话,请使用链接,不要转载内容MySQL内连接、左连接、右连接的使用以及区别下篇

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

相关文章

ASP.NET Web Game 构架设计2数据库设计

ASP.NETWebGame构架设计2--数据库设计   前一篇Blog对WebGame服务器的物理结构做了一个简要说明,下面我们对各个组成元素进行详细说明。            首先来看一下数据库设计。            游戏的数据库设计是项目基础设计中很重要的一个环节,下面将说明以下几个要点: u  为什么选用SqlServer u  基本原则...

JDBC数据类型、Java数据类型、标准sql类型

本概述是从《JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference》这本书中摘引来的。JavaSoft 目前正在准备这本书。这本书是一本教程,同时也是 JDBC 的重要参考手册,它将作为 Java 系列的组成部份,在 1997 年春季由 Addison-Wesley 出版...

springboot 和 mongdb连接问题 Exception in thread "main" com.mongodb.MongoSecurityException:

1 Exception in thread "main" com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='user', source='userdb', password=<hid...

利用docker镜像配置mysql集群+nextcloud集群+haproxy负载均衡

测试环境: docker xampp 9.1.1 ubuntu 16.0.4 hadoop 2.7 jdk 1.8 一、配置mysql集群 通过docker拉取mysql集群镜像创建容器,包括ndb_mgm(管理节点)、ndb_mgmd01、ndbd01(数据节点1)、ndbd02(数据节点2)、mysqld01(sql节点1)、mysqld02(sql节...

mysql innodb文件ibdata1损坏导致mysql无法启动

问题描述 1 mysql数据库5.6无法正常启动 2 直接复制替换innodb的frm和idb文件来新增数据表导致的问题 3 innodb文件ibdata1,ib_logfile0,ib_logfile1损坏,数据不一致 4 没有sql备份,无法正常登陆和导出当天数据 注意事项 innodb的表不能直接复制替换frm和idb文件,而是使用工具正常导入导出,...

数据库迁移利器:Migrator.Net

几年前在做项目中第一次接触到了Migrator.Net,就深深被吸引住了,至此以后在新的大项目中,我都会使用Migrator.Net来创建或者更新数据库架构。曾经在项目中也发现了小bug并提交给了作者,当时还是有点小激动啊。几年过去了,Migrator.Net虽然已经迁移到了github上,但作者好像从3年前就不再更新了,不过这不影响我对它的喜爱,一如既...