使用Code First的话对于实体字段或者表映射修改都需要使用迁移操作,下面列出操作具体步骤

1、创建映射类和实体,本文主要是讲解迁移步骤,其他代码则没有列出

1     public class ProductMap : EntityTypeConfiguration<Product>
2     {
3         public ProductMap()
4         {
5             ToTable("Product"); //指定表明
6             HasKey(p => p.Id);  //指定主键
7         }
8     }

1     public class Product
2     {
3         public int Id { get; set; }
4         public string Name { get; set; }
5         public string Description { get; set; }
6     }

2、假设现在Product类Name要设置为非空和最大长度为200

1     public class ProductMap : EntityTypeConfiguration<Product>
2     {
3         public ProductMap()
4         {
5             ToTable("Product"); //指定表明
6             HasKey(p => p.Id);  //指定主键
7             Property(p => p.Name).IsRequired().HasMaxLength(200);
8         }
9     }

如果运行程序则会报错

具体操作

启用迁移需要在VS的程序包管理控制台输入命令来完成,如果有多个项目,记得选择对应项目

命令:Enable-Migrations

输入命令后会创建一个文件夹Migrations其中有个Configuration文件

 1     internal sealed class Configuration : DbMigrationsConfiguration<MigrationOpt.Models.EntityContext>
 2     {
 3         public Configuration()
 4         {
 5             AutomaticMigrationsEnabled = false;
 6             ContextKey = "MigrationOpt.Models.EntityContext";
 7         }
 8
 9         protected override void Seed(MigrationOpt.Models.EntityContext context)
10         {
11
12         }
13     }

AutomaticMigrationsEnabled设置为true表示自动迁移,为false则需要手动迁移

Seed方法是在迁移过程数据库Schema成功应用以后执行的操作,可以利用这个方法添加一些初始化数据:

1 protected override void Seed(SchoolContext context)
2 {
3     context.Set<Student>().AddOrUpdate(
4       p => p.StudentName,
5       new Student { StudentName = "张三" },
6       new Student { StudentName = "李四" },
7       new Student { StudentName = "王五" }
8     );
9 }

1、自动迁移

如果需要使用自动迁移的话,除了设置AutomaticMigrationsEnabled设置为true,还需要在DbContext构造函数中写上这句

Database.SetInitializer(new MigrateDatabaseToLatestVersion<EntityContext, Configuration>("DBConnectionString"));

例如:

1         public EntityContext()
2             : base("name=DBConnectionString")
3         {
4             Database.SetInitializer(new MigrateDatabaseToLatestVersion<EntityContext, Configuration>("DBConnectionString"));
5         }

2、手动迁移

如果不喜欢自动迁移,可以手工完成这个操作。手工迁移的好处后,可以随时退回到某个指定的迁移版本。迁移文件也可以进行版本管理有利于团队开发。

首先把Configuration构造函数中AutomaticMigrationsEnabled置为false,表示不使用自动迁移。

手动迁移的操作也是在程序包管理控制台使用PowerShell来完成,在每次更改实体或映射配置后,我们运行下面这个命令来生成一个迁移文件:

Add-Migration ChangeSet1

Add-Migration是固定的,空格后面的ChangeSet1是别名,可以自定义

输入命令后会生成一个迁移文件,代码:

 1     public partial class ChangeSet1 : DbMigration
 2     {
 3         public override void Up()
 4         {
 5             AlterColumn("dbo.Product", "Name", c => c.String(nullable: false, maxLength: 200));
 6         }
 7
 8         public override void Down()
 9         {
10             AlterColumn("dbo.Product", "Name", c => c.String());
11         }
12     }

成功生成迁移文件后,运行 Update-Database 命令,EF就开始执行迁移操作,并把数据库更新到最新的迁移文件对应的版本。

这条命令有几个常用的参数,可以查看迁移在数据库中执行的详细操作(SQL等)

Update-Database -Verbose

这个参数可以指定目标迁移版本,对于需要退回到指定版本的情况很有用(回滚)

Update-Database -TargetMigration ChangeSet1

转载于:https://www.cnblogs.com/zuqing/p/5452440.html

EntityFramework之迁移操作(五)相关推荐

  1. 在生产环境下处理EFCore数据库迁移的五种方法

    在生产环境下处理EFCore数据库迁移的五种方法 原文链接:https://www.thereformedprogrammer.net/handling-entity-framework-core-d ...

  2. 深度学习(16)TensorFlow高阶操作五: 张量限幅

    深度学习(16)TensorFlow高阶操作五: 张量限幅 1. clip_by_value 2. relu 3. clip_by_norm 4. Gradient clipping 5. 梯度爆炸实 ...

  3. 深度学习(9)TensorFlow基础操作五: Broadcasting

    深度学习(9)TensorFlow基础操作五: Broadcasting 1. 操作思想 2. 具体例子 3. 理解 (1) How to understand? (2) Why Broadcasti ...

  4. Android 数据库综述(一) 数据库片的升级与数据的迁移操作

    Android 数据库综述(一) 数据库片的升级与数据的迁移操作 SQLiteOpenHelper 是 Android平台提供给我们一个数据库辅助类来创建或打开数据库 onCreate(SQLiteD ...

  5. GIS基础软件及操作(五)

    GIS基础软件及操作(五) 原文 GIS基础软件及操作(五) 练习五.空间分析的基本操作 空间分析的基本操作 空间分析模块 空间分析是基于地理对象的位置和形态的空间数据的分析技术,其目的在于提取和传输 ...

  6. ums网管应用unix系统的常用操作 (五)--iteye技术网站

    ums网管应用unix系统的常用操作 (五)--iteye技术网站 2011年04月01日 10, 设置sybase最大连接数为1024,需要预先做好以下设置 a, 在/etc/system文件末尾添 ...

  7. mysql 禁用事件_mysql事件之修改事件(ALTER EVENT)、禁用事件(DISABLE)、启用事件(ENABLE)、事件重命名及数据库事件迁移操作详解...

    本文实例讲述了mysql事件之修改事件(ALTER EVENT).禁用事件(DISABLE).启用事件(ENABLE).事件重命名及数据库事件迁移操作.分享给大家供大家参考,具体如下: 我们要知道,M ...

  8. EntityFramework 启用迁移 Enable-Migrations 报异常 No context type was found in the assembly

    转自:http://www.cnblogs.com/stevenhqq/archive/2013/04/18/3028350.html 以前做项目的时候,没有采用分类库的形式,所以迁移一致非常顺利,没 ...

  9. EntityFramework Core 迁移忽略主外键关系

    [导读]本文来源于一位公众号童鞋私信我的问题,在我稍加思索后给出了如下一种方案,在此之前我也思考过这个问题,借此机会我稍微看了下,目前能够想到的也只是本文所述方案. 为何要忽略主外键关系 我们不仅疑惑 ...

最新文章

  1. WICC上了全球很多家交易所,它是一种资产和流动性的代表
  2. 微型计算机储存数据的基本单位是,计算机储存和处理数据的基本单位是什么
  3. 在美妙的数学王国中畅游
  4. 苹果录屏功能没有声音_其实苹果手机也有录屏功能!简单操作几步,就能轻松开启...
  5. hdoj4710 规律题
  6. 液化气调压阀爆炸及使用问题分析
  7. MySQL 安装手册(5.7.20)
  8. mysqlin索引失效的情况
  9. Gradle Guide
  10. Windows界面编程第十二篇 位图显示特效 飞入效果与伸展效果
  11. 超宽带 DWM1000模块 引脚连接
  12. stuiod3t-2019030.dmg下载及studio3t macOS Cracking教程
  13. web前端——qq登录界面
  14. JWT 的退出登录方法
  15. Baas是什么?区块链Baas平台开发解决方案带你知晓
  16. 蒙特卡洛(Monte Carlo)方法的理解
  17. 刷脸支付:一场输不起的战役
  18. 《Microsoft SQL Server入门教程》第02篇 SQL Server 下载与安装
  19. Centos7.9最小化安装与初始化环境配置
  20. LeetCode刷题之python解法(持续更新)

热门文章

  1. http://ju.outofmemory.cn/entry/307891---------TICK
  2. Code First 迁移,及迁移错误
  3. Objective-C基础3:内存管理续
  4. 修改CentOS系统的默认启动级别
  5. 查找、插入、删除都很快的数据结构(散列表vs红黑树vs跳表)
  6. Docker Compose如何与SkyEye完美结合
  7. 网络协议:TCP拥塞控制
  8. ControllerBrokerRequestBatch分析
  9. (73)多路选择器(二选一)
  10. (23)FPGA锁存器与缓冲器的区别