焦点速读:.NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移
2023-05-18 14:41:32 博客园
前言

接上期文章《.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 Users { get; set; }        //构造函数        public MyDataBaseContext_mian(DbContextOptions option) : base(option)        {        }    }}
创建操作从库的数据上下文MyDataBaseContext_from.cs并继承数据上下文DbContext

操作主库的动作只有查询,如图所示:代码如下:

using Microsoft.EntityFrameworkCore;using test.Models;namespace test.MyDataBaseContext{    public class MyDataBaseContext_from : DbContext    {        //添加User类        public DbSet Users { get; set; }        //构造函数        public MyDataBaseContext_from(DbContextOptions 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(    options =>    {        options.UseMySql(builder.Configuration.GetConnectionString("MySqlDataBase"), new MySqlServerVersion(new Version(8, 0, 31)));    });//注册操作从库的数据上下文builder.Services.AddDbContext(    options =>    {        options.UseMySql(builder.Configuration.GetConnectionString("MySqlDataBase2"), new MySqlServerVersion(new Version(8, 0, 31)));    });
开始迁移

在NuGet程序包上搜索安装下面这两个包,Microsoft.EntityFrameworkCore.ToolsMicrosoft.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操作数据库基本增删改查

热门推荐

文章排行

  1. 2023-05-18焦点速读:.NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移
  2. 2023-05-18《街霸6》公测介绍第3弹 对战功能及往后活动 天天头条
  3. 2023-05-18课堂上,“船王争霸赛”点燃国防梦
  4. 2023-05-18黑海港口农产品外运协议再延长2个月 视点
  5. 2023-05-18LCK解说预测MSI决赛:均看好T1夺冠,Huni认为有内战
  6. 2023-05-18越跌越买,跟踪海外半导体指数QDII产品最高份额涨超1282%
  7. 2023-05-18【世界聚看点】国家金融监督管理总局揭牌
  8. 2023-05-18今日热门!国家医保局:严厉打击各种违规违法使用医保基金的行为绝不让医
  9. 2023-05-18全球快报:涉嫌严重违纪违法!安徽省人大常委会委员袁华接受审查调查
  10. 2023-05-18当前短讯!浙江金华一水库施工现场发现古墓 初步推断为五代末到宋初
  11. 2023-05-18机构策略:市场延续弱势格局 关注航天军工、半导体等板块
  12. 2023-05-18中国空间站低成本货物运输系统总体方案公开征集
  13. 2023-05-18编剧陈彤:平凡才是唯一答案
  14. 2023-05-18交通事故肇事方不垫付医药费怎么办_交通事故肇事方需要怎么做-天天最新
  15. 2023-05-180x0000001e蓝屏修复方法
  16. 2023-05-18手机还有新用途?谷歌希望将安卓手机变成行车记录仪
  17. 2023-05-18气态行星内部有陆地吗_气态行星 焦点信息
  18. 2023-05-17从《鱿鱼游戏》到《黑暗荣耀》:网飞的战略核心,只有两个字 热门看点
  19. 2023-05-17美知名投资家:美元作为顶级货币的时代“即将结束”丨世界观 当前热讯
  20. 2023-05-17硬核科技论 | 不再依赖高精地图 华为ADS 2.0厉害在哪?|世界报道