EF Core数据迁移操作
摘要
在开发中,使用EF code first方式开发,那么如果涉及到数据表的变更,该如何做呢?当然如果是新项目,删除数据库,然后重新生成就行了,那么如果是线上的项目,数据库中已经有数据了,那么删除数据库重新生成就不行了,那么该如何解决呢?Ef提供了一种数据迁移的操作。具体该如何操作呢。
数据迁移步骤
开发环境 vs2017+Mysql
这里以web为例。具体该如何操作。
1、新建一个web应用。

发现Asp.Net Core站点,项目结构又有变化,项目结构如下:

发现这里吧wwwroot又移到了站点下面,之前是分开的。这样更接近原先的asp.net mvc项目的结构。
2、安装EF
使用Nuget进行安装,下面的2个包
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools
Pomelo.EntityFrameworkCore.MySql

Tools包,功能用于数据迁移,更新数据库等操作。
3、添加测试的类和数据库上下文
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks; namespace Wolfy.MigrationDemo.Models
{public class User
{
[Key]
public int Id { set; get; }
public string Name { set; get; }
public DateTime CreateTime { set; get; } = DateTime.Now;
public DateTime ModifyTime { set; get; } = DateTime.Now;
}
}
数据库上下文
注意:这里需要添加Pomelo.EntityFrameworkCore.MySql包
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Wolfy.MigrationDemo.Models; namespace Wolfy.MigrationDemo.Data
{
public class MyContext : DbContext
{
public DbSet<User> Users { set; get; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseMySql(@"Server=localhost;database=migrationtest;uid=root;pwd=abcd;");
}
}
4、通过Migration生成数据库
在vs的Nuget控制台,输入以下命令
Add-Migration init
如图

初始化成功后,在解决方案下,会出现下面的目录

注意:在新建项目的时候,最好是放在英文目录下,在2.0版本的情况下,不然在执行该命令的时候,会出现因为中文乱码,导致json格式化报错。
生成数据库

命令执行成功,生成数据库

插入数据后进行迁移测试
public IActionResult Index()
{
using (MyContext db = new MyContext())
{
db.MyUsers.Add(new Models.User { Name = "Wolfy" });
db.SaveChanges();
}
return View();
}

二期,为了方便统计,需要用户的年龄,那么我们就可以为User添加字段,通过数据迁移,添加字段,并不会影响原先的数据。
如图,变化的实体类如下
public class User
{
[Key]
public int Id { set; get; }
public string Name { set; get; }
public DateTime CreateTime { set; get; } = DateTime.Now;
public DateTime ModifyTime { set; get; } = DateTime.Now;
public int Age { set; get; }
}
执行迁移命令
PM> Add-Migration init
To undo this action, use Remove-Migration.
PM> Update-Database init
Applying migration '20170917062429_init'.
Done.
PM> Add-Migration updatedb
To undo this action, use Remove-Migration.
PM> Update-Database updatedb
Applying migration '20170917063252_updatedb'.
Done.
PM>
查看数据表的变化

总结
这篇文章介绍了数据迁移在code first方式中的基本操作。
EF Core数据迁移操作的更多相关文章
- [EF Core]数据迁移(二)
摘要 在实际项目中,大多都需要对业务逻辑以及操作数据库的逻辑进行分成操作,这个时候该如何进行数据的迁移呢? 步骤 上篇文章:EF Core数据迁移操作 比如,我们将数据上下文放在了Data层. 看一下 ...
- ef core数据迁移的一点小感悟
ef core在针对mysql数据迁移的时候,有些时候没法迁移...有两种情况没法迁移,一种是因为efcore的bug问题导致没法迁移,这个在github上有个问题集,另外一种是对数据表进行较大幅度的 ...
- .net core2.1 - ef core数据库迁移,初始化种子数据
起因:早上偶然看见一篇文章说是ef core(2.x)使用种子数据,主表子表迁移时候,正常情况下说是无法迁移成功,索性就试试,结果是和ef6的一样,没感觉有什么大的区别.一切OK,见下面内容. 1.首 ...
- EF Core 数据变更自动审计设计
EF Core 数据变更自动审计设计 Intro 有的时候我们需要知道每个数据表的变更记录以便做一些数据审计,数据恢复以及数据同步等之类的事情, EF 自带了对象追踪,使得我们可以很方便的做一些审计工 ...
- EF Core新增迁移时无法加载程序集“System.ValueTuple”的错误
EF Core使用迁移命令时,如: Add-Migration Init 有时会出现如下错误: System.IO.FileLoadException: Could not load file or ...
- ASP.NET Core ef启用数据迁移
创建一个项目 通过Nuget获取EF Core相关的扩展包 appsettings.json 建立数据库连接串 创建数据库上下文EntityDbContext类,用于实体类映射数据库表 使用包管理器控 ...
- EF Core 数据库迁移(Migration)
工具与环境介绍 1.开发环境为vs 2015 2.mysql EF Core支持采用 Pomelo.EntityFrameworkCore.MySql 源代码地址(https://github. ...
- EF Code-First数据迁移
Code-First数据迁移 首先要通过NuGet将EF升级至最新版本. 新建MVC 4项目MvcMigrationDemo 添加数据模型 Person 和 Department,定义如下: usi ...
- 【EF】EF Code-First数据迁移
Code-First数据迁移 首先要通过NuGet将EF升级至最新版本. 新建MVC 4项目MvcMigrationDemo 添加数据模型 Person 和 Department,定义如下: usi ...
随机推荐
- 统一过程模型(RUP/UP)
http://blog.sina.com.cn/s/blog_6a06f1b7010121hz.html 统一过程(RUP/UP,Rational Unified Process)是一种以用例驱动.以 ...
- IIS 无法识别的属性“targetFramework”---解决之道
在安装VS2010后,应用.NET Framework 4创建的网站放在IIS(7.0)下会出现如下的错误: 其中的“版本信息”中告诉了我们.NET Framework和ASP.NET的版本都是2.0 ...
- JPA 菜鸟教程 15 继承-一个表-SINGLE_TABLE
原地址:http://blog.csdn.net/JE_GE/article/details/53678422 继承映射策略 一个类继承结构一个表的策略,最终只生成一个表,这是继承映射的默认策略. 举 ...
- java实现xml格式与javabean之间的转换XmlUtil类
XmlUtil类:不多说,直接撸代码: /** * java 转换成xml * @Title: toXml * @Description: TODO * @param obj 对象实例 * @retu ...
- hadoop-2.7.2-HA安装笔记
配置方案如图 NN DN ZK ZKFC JN RM NM(任务管理器) HMaster Region Server Node1 1 1 1 1 1 Node2 1 1 1 1 1 1 1 Nod ...
- SqlServer批量Sql一个表的数据导入到另一个数据
一个表的导入: SET IDENTITY_INSERT [master_new].[dbo].[OpinionList] ON INSERT INTO [master_new].[dbo].[Opin ...
- python强大的数据类型转换
# 原始的二维表数据集 jsonObj=[] # 添加模拟的数据 for i in range(1001,1004): for j in range(1,34): jsonObj.append({&q ...
- 如何在CI中写工具类,在哪个目录写
在Libraries目录写工具类,可以参考项目中七牛的集成写法 而Helps目录写的是辅助函数(公共函数)这一类的
- 这可能是最全的禁用win10自动更新了
https://jingyan.baidu.com/article/647f0115e5dbbf7f2148a834.html 本电脑系统版本:Windows 10 专业版 1607 本电脑问题:某天 ...
- TypeScript的HTML5游戏
wildfirecode 自动化的基于TypeScript的HTML5游戏开发 自动化的开发流程 在HTML5游戏开发或者说在Web客户端开发中,对项目代码进行修改之后,一般来说,需要手动刷新浏览器来 ...