• EF Code First Migrations数据库迁移


    1、EF Code First创建数据库

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

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

    PM> Install-Package EntityFramework

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

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

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

    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());
            }
        }
    }

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

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

     

    2、EF Code First数据库迁移

    2.1、生成数据库

      修改类文件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.2、版本回溯

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

    PM> Add-Migration ModifyCity
    PM> Update-Database -Verbose

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

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

    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语句的其他参数

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

    PM> Enable-Migrations -ContextTypeName Portal.PortalContext

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

    Enable-Migrations

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

    public Configuration()
    {
          AutomaticMigrationsEnabled = false;
    }

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

    PM> Enable-Migrations -StartUpProjectName Portal

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

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

    Update-Database -Verbose 

    4、参考资料

    https://docs.microsoft.com/zh-cn/ef/ef6/modeling/code-first/migrations/index?redirectedfrom=MSDN

  • 相关阅读:
    Representation Data in OpenCascade BRep
    Render OpenCascade Geometry Surfaces in OpenSceneGraph
    Render OpenCascade Geometry Curves in OpenSceneGraph
    OpenCascade Shape Representation in OpenSceneGraph
    Geometry Surface of OpenCascade BRep
    Geometry Curve of OpenCascade BRep
    Tyvj2017清北冬令营入学测试
    Spfa算法模板
    洛谷1016 旅行家的预算
    洛谷1290 欧几里得的游戏
  • 原文地址:https://www.cnblogs.com/IIXS/p/11702742.html
Copyright © 2020-2023  润新知