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方式中的基本操作。
-
博客地址:http://www.cnblogs.com/wolf-sun/
博客版权:如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2013-09-17 js控制固定div和随屏滚动div兼容多浏览器和纯css控制(来自网络)