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方式中的基本操作。

 

轉自:https://www.imooc.com/article/27276


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM