关于Enable-Migrations指令说明
我们知道,Enable-Migrations的作用是在Code First项目中使用数据迁移,
通过get-help Enable-Migrations查看它的语法:

Enable-Migrations [-ContextTypeName <String>]
[-EnableAutomaticMigrations] [-MigrationsDirectory <String>]
[-ProjectName <String>] [-StartUpProjectName <
  
 String>] [-ContextProjectName <String>] [-ConnectionStringName
<String>] [-Force] [-ContextAssemblyName <String>]
[-AppDomainBaseDirectory <String>] [<Co
    mmonParameters>]

Enable-Migrations [-ContextTypeName <String>]
[-EnableAutomaticMigrations] [-MigrationsDirectory <String>]
[-ProjectName <String>] [-StartUpProjectName <
  
 String>] [-ContextProjectName <String>] -ConnectionString
<String> -ConnectionProviderName <String> [-Force]
[-ContextAssemblyName <String>] [-AppDomainB
    aseDirectory <String>] [<CommonParameters>]

关于这个指令的说明:
通过在项目中构建迁移配置类启用迁移。如果目标数据库由初始化程序创建,将创建初始迁移(除非通过EnableAutomaticMigrations参数启用自动迁移)。

它有三个相关的指令可以查看更为具体的信息:
若要查看示例,请键入: "get-help Enable-Migrations -examples".
有关详细信息,请键入: "get-help Enable-Migrations -detailed".
若要获取技术信息,请键入: "get-help Enable-Migrations -full".

下面我们输入get-help Enable-Migrations -examples指令,查看它有几种使用方式:
在一个Code First项目中启用数据迁移的方式有以下三种:
-------------------------- 示例 1 --------------------------
C:\PS>Enable-Migrations

//Scaffold a migrations configuration in a project with only one context
在仅具有一个上下文的项目中支架迁移配置

-------------------------- 示例 2 --------------------------
C:\PS>Enable-Migrations -Auto

//Scaffold a migrations configuration with automatic migrations enabled for a project with only one context
使用仅具有一个上下文的项目启用自动迁移的迁移配置
-------------------------- 示例 3 --------------------------
C:\PS>Enable-Migrations -ContextTypeName MyContext -MigrationsDirectory DirectoryName

//Scaffold
a migrations configuration for a project with multiple contexts This
scaffolds a migrations configuration for MyContext and will put the
configuration and subsequent configurations in a new directory called
"DirectoryName"
支持具有多个上下文的项目的迁移配置支持MyContext的迁移配置,并将配置和后续配置放入名为“DirectoryName”的新目录中

数据迁移步骤:
1、Enable-Migrations
a.在项目根目录下创建了一个Migrations文件夹
b.在Migrations文件夹下新建一个Configuration.cs文件。

(add-migration InitialCreate)
如果前面没修改web.config的数据库名, 执行enable-migrations指令后,Migrations将会找到已有的数据库MVCDemo然后自动执行add-migration指令。

2、Add-Migration FirstMigration
执行 add-migration时,同样在Migrations文件夹里面,产生一个<timestamp>_InitialCreate.cs的文件。
里面两个方法,Up和Down:


Up方法创建数据库表,Down方法删除表。

3、Update-Database
update-database指令调用了Up方法来新建database的表(和data model entity set对应), 然后调用Seed方法来填充测试数据。

如果更新数据库存在冲突而不能执行更新,可以添加 -Force强制执行,例如:“Update-Database -Force”

设置自动迁移
每次都通过控制台来进行迁移太过麻烦,可以设置为自动迁移。
有以下两个参数可以对自动迁移进行设置:
  1. AutomaticMigrationsEnabled:获取或设置 指示迁移数据库时是否可使用自动迁移的值。
  2. AutomaticMigrationDataLossAllowed:获取或设置 指示是否可接受自动迁移期间的数据丢失的值。如果设置为false,则将在数据丢失可能作为自动迁移一部分出现时引发异常。
修改迁移的Configuration类如下:
namespace GMF.Demo.Core.Data.Migrations
{
    internal sealed class Configuration : DbMigrationsConfiguration<DemoDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = true;

        }

protected override void Seed(DemoDbContext context)
        {
            List<Member> members = new List<Member>
            {
                new Member { UserName = "admin", Password = "123456", Email = "admin@gmfcn.net", NickName = "管理员" },
                new Member { UserName = "gmfcn", Password = "123456", Email = "mf.guo@qq.com", NickName = "郭明锋" }
            };
            DbSet<Member> memberSet = context.Set<Member>();
            memberSet.AddOrUpdate(m => new { m.Id }, members.ToArray());
        }
    }
}
修改数据库初始化策略如下:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<DemoDbContext, Configuration>());

Code First项目Migrations的更多相关文章

  1. Entity Framework Core Code First 项目实践

    Entity Framework Core Code First 实践 任何一种技术的出现都是为了解决一系列特定的问题,只有了解了技术所要解决的关键问题,才能理解它的真正用途,之后,才能在实践中用好它 ...

  2. Code First01---CodeFirst项目的搭建

    Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发流程大相径庭,开发体验完全不一样.三种开发模式各有优缺点,对于程序 ...

  3. 【EF Code First】Migrations数据库迁移

    1,打开工具->NuGet程序管理器->程序包管理器控制台 默认项目中要选择  数据访问上下文类  所在的项目 我的DB是在命名空间CodeFirst.UI下的所以选择CodeFirst. ...

  4. Code::Blocks项目配置基础

    File 菜单 New :新建( Empty file/file . class . project . build target ) . Recent projects/files :近期打开的项目 ...

  5. VS Code做项目的笔记

    需要自己研究的东西:http://www.bootcss.com/ 画页面时的布局插件:http://blog.chinaunix.net/uid-22414998-id-2878529.html v ...

  6. VS Code C++ 项目快速配置模板

    两个月前我写过一篇博客 Windows VS Code 配置 C/C++ 开发环境 ,主要介绍了在 VS Code 里跑简单 C 程序的一些方法.不过那篇文章里介绍的方法仅适用于单文件程序,所以稍微大 ...

  7. 使用asp.net mvc + entityframework + sqlServer 搭建一个简单的code first项目

    步骤: 1. 创建一个asp.net mvc 项目 1.1 项目创建好结构如下 2 通过vs安装EntityFramework框架 install-package entityframework 3. ...

  8. Google Code项目代码托管网站上Git版本控制系统使用简明教程

    作为一个著名的在线项目代码托管网站,Google Code目前主要支持三种版本控制系统,分别为Git, Mercurial和 Subversion.Subversion即SVN相信大家都已经熟知了,这 ...

  9. 如何使用Visual Studio Code开发Django项目

    如何获得 Visual Studio Code 访问 http://code.visualstudio.com 下载并安装. 前提条件 安装Python 2.7 及 Python 3.5,Window ...

随机推荐

  1. window10 安装.net framework 2.0插件

    1 背景 电脑升级到window10操作系统之后,在使用过程中安装某些软件(如 BI publisher)需要用到.net framework 2.0/3.5 框架. 例如:直接安装BI publis ...

  2. android studio最新版的安装和配置(3.1.2)

    android studio最新版的安装和配置(3.1.2) 下载地址: android studio:http://www.android-studio.org/ JDK:http://www.or ...

  3. PHP-生产随机验证码图片

    // <span style="white-space:pre"> </span>//因为要把产生的验证码保存到session中,此处为session开始 ...

  4. 数据结构之队列(Queue)

    1,队列的定义 队列:是一种先进先出的数据结构,如下图所示,现进去的数据在队列前面(front),先出队列,后进入队列的数据在后面(rear),后出队列. 队列常用操作: q=Queue() #创建队 ...

  5. 2965 -- The Pilots Brothers' refrigerator

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27893 ...

  6. EBR-TLV数据格式

    EMV规范中的BER-TLV数据格式:BER-TLV结构由Tag.Length.Value三部分组成. [TAG域]TAG可以由1个与多个字节组成,TAG域的第一个字节编码格式如下: 其中由三部分组成 ...

  7. Jmeter启动报错解决方案

    安装好jmeter之后在启动Jmeter的过程中出现了如下的报错信息(大部分的原因是配置不对): /usr/local/Cellar/jmeter/5.1.1/libexec/bin/jmeter: ...

  8. AFNetworking网址中有中文崩溃的问题

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSe ...

  9. discriminator 鉴别器

    在特定的情况下使用不同的pojo进行关联, 鉴别器元素就是被设计来处理这个情况的.鉴别器非常容易理解,因为它的表现很像 Java 语言中的 switch 语句:discriminator 标签常用的两 ...

  10. 【Web网站服务器开发】Apache 和 Tomcat的区别及配置

    Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML.PHP.JSP.Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置. apache是web服 ...