杨家健康理疗 发表于 2023-5-18 17:07:51

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

前言

接上期文章《.NET6项目连接数据库方式方法》,有人问了我几个问题,现在就这几个问题,拓展延申一下创建实体类、数据库。把ORM框架和数据迁移都写进去。
https://img-blog.csdnimg.cn/3012cc878a094c529af83982b225c267.png
安装ORM框架,这里我们采用EFCore

安装EFCore

我的项目是在Linux上创建的,使用的是vscode开发工具远程开发。为了方便大家阅读和操作,我将项目down到我的本地电脑(Windows10系统),使用专业的.NET开发工具Visual Studio开发。
https://img-blog.csdnimg.cn/bb2f9b4a535a4d7cb89e5464fd1d7e27.png
创建实体类

https://img-blog.csdnimg.cn/fa27f744a32b4de68fd05c61b3d9c788.png
添加完以后的解决方案是这样的
User.cs类的内容如下:
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace test.Models
{
    public class User
    {
         //数据库主键
      public int UserId { get; set; }
      
      public string UserName { get; set; }
      
      public string UserPwd { get; set; }
      public int UserAge { get; set; }
      
      public string? UserAddress { get; set; }

    }
}创建数据上下文类

添加数据上下文文件夹MyDataBaseContext,添加以后解决方案结构如下

https://img-blog.csdnimg.cn/363140de5589402e96f4e979ee8f6fba.png
创建操作主库的数据上下文MyDataBaseContext_main.cs并继承数据上下文DbContext

操作主库的动作有添加、修改、删除,如图所示:
https://img-blog.csdnimg.cn/ff1b8eb621ee493fbbdbdca08af053d8.png
代码如下:
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

操作主库的动作只有查询,如图所示:
https://img-blog.csdnimg.cn/8d3c6b2bf0a448afa05e7078107cdbfb.png
代码如下:
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文件中添加连接数据库字符串二,便于大家区分,写成这样:
https://img-blog.csdnimg.cn/25086cc790fd489ba5486f670cda95f2.png
"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文件中注册服务,需要注意的是,我们需要注册两个数据上下文。才能实现读写分离,如图所示:
https://img-blog.csdnimg.cn/9f185ebac3204d2b925332719e7deb25.png
代码如下:
//注册操作主库的数据上下文
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
https://img-blog.csdnimg.cn/c2d843d68a2c400a9f7a66137b6e14a1.png
开始迁移,点击工具,NuGet包管理器,程序包管理器控制台,打开控制台。因为我们有两个DbConext,直接使用Add-Migration命令会报如下错误。
https://img-blog.csdnimg.cn/964968b4f00840ee8d8103b1f46711d0.png
因此我们需要分开操作,操作方式如下:
首先操作主库的上下文:
# 数据迁移
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文件对应的目录
https://img-blog.csdnimg.cn/cf1fd410253942cf8b0f473161e720ad.png
https://img-blog.csdnimg.cn/2c63d42d0480438cb5abfafcf5ee07b3.png
https://img-blog.csdnimg.cn/996504a57d03405f8453ee823b885773.png
可以看到MySQL中已经生成两个数据库,每个数据库中的表都是一样的。
配置数据库主从同步

数据库主从同步,这里不再演示,不会的小伙伴可以去看我的另外一篇文章《基于Canal实现MySQL 8.0 数据库数据同步》。链接地址
下期预告:
.net 6框架下的EF Core操作数据库基本增删改查

来源:https://www.cnblogs.com/lym003/archive/2023/05/18/17411699.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: .NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移