NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移

本文介绍了如何在Linux环境下,使用VSCode远程开发,然后在Windows10上用VisualStudio进行.NET项目操作。文章详细讲解了如何创建和配置EFCore的实体类和数据上下文,实现数据库的读写分离,包括主库和从库的数据上下文注册,以及数据库迁移的过程。最后提到了数据库主从同步的概念,并引导读者参考另一篇文章来实现这一功能。
摘要由CSDN通过智能技术生成

安装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 数据库数据同步》。链接地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野生的狒狒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值