.NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移
前言
接上期文章《.NET6项目连接数据库方式方法》,有人问了我几个问题,现在就这几个问题,拓展延申一下创建实体类、数据库。把ORM框架和数据迁移都写进去。
安装ORM框架,这里我们采用EFCore
安装EFCore
我的项目是在Linux上创建的,使用的是vscode开发工具远程开发。为了方便大家阅读和操作,我将项目down到我的本地电脑(Windows10系统),使用专业的.NET开发工具Visual Studio开发。
创建实体类
添加完以后的解决方案是这样的
User.cs类的内容如下:
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace test.Models
{
public class User
{
[Key] //数据库主键
public int UserId { get; set; }
[Column(TypeName = "nvarchar(100)")]
public string UserName { get; set; }
[Column(TypeName = "nvarchar(100)")]
public string UserPwd { get; set; }
public int UserAge { get; set; }
[Column(TypeName = "nvarchar(200)")]
public string? UserAddress { get; set; }
}
}
创建数据上下文类
添加数据上下文文件夹MyDataBaseContext,添加以后解决方案结构如下
创建操作主库的数据上下文MyDataBaseContext_main.cs并继承数据上下文DbContext
操作主库的动作有添加、修改、删除,如图所示:
代码如下:
using Microsoft.EntityFrameworkCore;
using test.Models;
namespace test.MyDataBaseContext
{
public class MyDataBaseContext_mian : DbContext
{
//添加User类
public DbSet<User> Users { get; set; }
//构造函数
public MyDataBaseContext_mian(DbContextOptions<MyDataBaseContext_mian> option) : base(option)
{
}
}
}
创建操作从库的数据上下文MyDataBaseContext_from.cs并继承数据上下文DbContext
操作主库的动作只有查询,如图所示:
代码如下:
using Microsoft.EntityFrameworkCore;
using test.Models;
namespace test.MyDataBaseContext
{
public class MyDataBaseContext_from : DbContext
{
//添加User类
public DbSet<User> Users { get; set; }
//构造函数
public MyDataBaseContext_from(DbContextOptions<MyDataBaseContext_from> option) : base(option)
{
}
}
}
添加连接字符串配置
按照上一篇文章《.NET6项目连接数据库方式方法》的方式方法首先在appsettings文件中添加连接数据库字符串二,便于大家区分,写成这样:
"ConnectionStrings": {
"MySqlDataBase": "Server=192.168.11.82;Port=3306;User Id=ymliu;Password=ymliu2023;Database=BlogDataBase",
"MySqlDataBase2": "Server=192.168.11.82;Port=3306;User Id=ymliu;Password=ymliu2023;Database=BlogDataBase2"
}
其次在Program.cs文件中注册服务,需要注意的是,我们需要注册两个数据上下文。才能实现读写分离,如图所示:
代码如下:
//注册操作主库的数据上下文
builder.Services.AddDbContext<MyDataBaseContext_mian>(
options =>
{
options.UseMySql(builder.Configuration.GetConnectionString("MySqlDataBase"), new MySqlServerVersion(new Version(8, 0, 31)));
});
//注册操作从库的数据上下文
builder.Services.AddDbContext<MyDataBaseContext_from>(
options =>
{
options.UseMySql(builder.Configuration.GetConnectionString("MySqlDataBase2"), new MySqlServerVersion(new Version(8, 0, 31)));
});
开始迁移
在NuGet程序包上搜索安装下面这两个包,Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Design
开始迁移,点击工具,NuGet包管理器,程序包管理器控制台,打开控制台。因为我们有两个DbConext,直接使用Add-Migration命令会报如下错误。
因此我们需要分开操作,操作方式如下:
首先操作主库的上下文:
# 数据迁移
add-migration testDataBaseMigraMain -c MyDataBaseContext_mian -o test/DataMigra/main
# 更新到数据库
Update-Database -Context MyDataBaseContext_mian
其次操作从库的上下文:
# 数据迁移
add-migration testDataBaseMigraFrom -c MyDataBaseContext_from -o test/DataMigra/from
# 更新到数据库
Update-Database -Context MyDataBaseContext_from
注解: -c/-Context :哪个DbConext ;-o :这个DbConext对应生成 的Migrations文件对应的目录
可以看到MySQL中已经生成两个数据库,每个数据库中的表都是一样的。
配置数据库主从同步
数据库主从同步,这里不再演示,不会的小伙伴可以去看我的另外一篇文章《基于Canal实现MySQL 8.0 数据库数据同步》。链接地址
下期预告:
.net 6框架下的EF Core操作数据库基本增删改查
.NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移的更多相关文章
- 使用EF Model First创建edmx模型,数据库有数据的情况下,如何同时更新模型和数据库
使用"EF Model First",我们可以很直观地在edmx文件中创建数据模型,并根据模型生成数据库,整个过程快速而高效.可当数据库中有了一定的数据量,同时,可能需要对模型中字 ...
- 使用EF Core更新与修改生产数据库
使用EF Core的Code First,在设计阶段,直接使用Database.EnsureCreated()和EnsureDeleted()可以快速删除.更新最新的数据结构.由于没有什么数据,删除的 ...
- EF Core中Fluent Api如何删除指定数据表中的行
这两天一直在研究在code first下如何删除数据表中的指定行,于是开始搜狗,后来百度,压根就找不到资料,后来一想可能我的搜索关键字有问题,而且ef core命令与ef的命令差不多,于是从这两个方面 ...
- Neo4j ETL工具快速上手:简化从关系数据库到图数据库的数据迁移
注:本文系从https://medium.com/neo4j/tap-into-hidden-connections-translating-your-relational-data-to-graph ...
- EF Core 中多次从数据库查询实体数据,DbContext跟踪实体的情况
使用EF Core时,如果多次从数据库中查询一个表的同一行数据,DbContext中跟踪(track)的实体到底有几个呢?我们下面就分情况讨论下. 数据库 首先我们的数据库中有一个Person表,其建 ...
- Entity Framework (EF) Core工具创建一对多和多对多的关系
一. EntirtyFramework(EF)简介 EntirtyFramework框架是一个轻量级的可扩展版本的流行实体框架数据访问技术,微软官方提供的ORM工具让开发人员节省数据库访问的代码时间 ...
- EF Core利用Scaffold从根据数据库生成代码
在EF6 之前的时代,如果需要从数据库中生成代码,是可以直接在界面上操作的,而到了EF Core的时代,操作方式又有更简便的方式了,我们只需要记住以下这条指令. Scaffold-DbContext ...
- mysql创建和使用数据库
mysql连接和断开 mysql -h host -u user -p******** /*建议不要在命令行中输入密码,因为这样做会使其暴露给在您的计算机上登录的其他用户窥探*/ mysql -u u ...
- 如何将MongoDB数据库的数据迁移到MySQL数据库中
FAQ v2.0终于上线了,断断续续忙了有2个多月.这个项目是我实践的第一个全栈的项目,从需求(后期有产品经理介入)到架构,再到设计(有征询设计师的意见).构建(前端.后台.数据库.服务器部署),也是 ...
- Mongodb到mysql数据库的数据迁移(Java,Windows)
运行环境为windows 测试过260万的数据表,迁移大概要10分钟左右,当然肯定和网络,字段大小什么的有关系. 遇到的坑和注意点都用紫色标记了(对,就是我大乃团的高冷紫--Nogizaka 46) ...
随机推荐
- 统一返回对象Result
统一返回对象Result 项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致.轻松. 一般情况下,统一返回数据格式 ...
- Git添加SSH密钥步骤
1.先去本机上面看看用户主目录里面有没有.ssh这个文件夹 如果有的话,再看看该目录下有没有id_rsa和id_rsa_pub这两个文件: 若还是有,就直接跳过这一步到下一步:若是没有,我们需要创建S ...
- Tarjan强连通分量(scc)
概念解释 节点强连通:\(v_i\)与\(v_j\)(\(v_i ≠ v_j\))强连通是指从\(vi\)到\(vj\)和从\(vj\)到\(vi\)都存在路径,即两节点互相可达 强连通图:在有向图\ ...
- 剑指 offer 第 4 天
第 4 天 查找算法(简单) 剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但 ...
- CentOS7-自动化部署web集群
一.项目要求 1.创建role,通过role完成项目(可能需要多个role) 2.部署nginx调度器(node2主机) 3.部署2台lnmp服务器(node3,node4主机) 4.部署mariad ...
- 【原理揭秘】Vite 是怎么兼容老旧浏览器的?你以为仅仅依靠 Babel?
作者:京东科技 孙凯 一.前言 对前端开发者来说,Vite 应该不算陌生了,它是一款基于 nobundle 和 bundleless 思想诞生的前端开发与构建工具,官网对它的概括和期待只有一句话:&q ...
- 部署:mysql搭建多主一从源复制环境
问题描述:搭建过一主多从的环境,由于数据库数据一致性要求高,有些情景会搭建一主多从的架构,搭建多主一从的模式,相对来说适合数据整合,将多个业务的库整合到一起,方便做查询,也可以当做一个监控其他主库数据 ...
- vue常用标签(引入vue.js写法)
首先在html中引入vue.js,具体怎么下载可以参考https://blog.csdn.net/lvoelife/article/details/129254906,下载后在html中引入: 一 内 ...
- awk判断整除(包含小数和负数)
awk判断整除常用的方法是用内置的int或者求余数的算符% 被整数整除 输出0-100之间能被9整除的整数 使用 num/9==int(num/9) 的判断方法可以很好实现. awk 'BEGIN{ ...
- Python 列表的修改、添加和删除元素
列表修改.添加和删除元素 大多数创建的列表都是动态的,随程序的运行增删元素 修改列表元素 指定列表名和要修改的元素的索引,再指定要修改元素的新值 # 修改列表元素案例 motorcycles = [' ...