摘要
在開發中,使用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
