摘要
在開發中,使用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方式中的基本操作。
轉自:https://www.imooc.com/article/27276