zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    java中值传递和引用传递
    java中的XML
    java I/O流
    RandomAccessFile类
    java中File类
    Java 理论与实践: 正确使用 Volatile 变量
    eclipse 总弹出 secure storage的解决办法
    安卓表格布局android:collapseColumns,android:shrinkColumns和stretchColumn
    Android关联源码support-v4的问题解决
    关于spring framework最新发布压缩包的下载问题 【非常非常新手帖】
  • 原文地址:https://www.cnblogs.com/jnm121/p/12558553.html
Copyright © 2011-2022 走看看