摘要
在开发中,使用EF code first方式开发,那么如果涉及到数据表的变更,该如何做呢?当然如果是新项目,删除数据库,然后重新生成就行了,那么如果是线上的项目,数据库中已经有数据了,那么删除数据库重新生成就不行了,那么该如何解决呢?Ef提供了一种数据迁移的操作。具体该如何操作呢。
数据迁移步骤
开发环境 vs2017+Mysql
这里以web为例。具体该如何操作。
1、新建一个web应用。
文章图片
发现Asp.Net Core站点,项目结构又有变化,项目结构如下:
文章图片
发现这里吧wwwroot又移到了站点下面,之前是分开的。这样更接近原先的asp.net mvc项目的结构。
2、安装EF
使用Nuget进行安装,下面的3个包
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools
Pomelo.EntityFrameworkCore.SqlServer
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;
}
}
数据库上下文
【.NET|EF Core codefirst数据迁移操作】注意:这里需要添加Pomelo.EntityFrameworkCore.SqlServer包
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 Users { set;
get;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseSqlserver(@"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 '20220401092429_01'.
Done.
PM> Add-Migration updatedb
To undo this action, use Remove-Migration.
PM> Update-Database updatedb
Applying migration '20220401094001_updatedb'.
Done.
PM>
总结
这篇文章介绍了数据迁移在code first方式中的基本操作。
推荐阅读
- C#|C# - 环境
- c#|C# 操作Windows注册表
- 数据仓库|从理论到工程实践——用户画像入门宝典
- 数仓建模—ID Mapping
- APP开发从0到1|初识IndexedDB【增,查】中
- .NET开发者们,期待你们来发声
- 华为认证|计算机专业本科生应该选择考研还是考职业认证()
- 数仓建模—OneID
- .NET|【C#】视频总结——真正意义上学习的面向对象编程