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

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

时间:2023-05-19 18:56:58浏览次数:49  
标签:Core 上下文 get 数据库 EF EFCore using MyDataBaseContext public

前言

接上期文章《.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操作数据库基本增删改查

 

转 https://www.cnblogs.com/lym003/p/17411699.html

标签:Core,上下文,get,数据库,EF,EFCore,using,MyDataBaseContext,public
From: https://www.cnblogs.com/wl-blog/p/17416043.html

相关文章

  • ASP.NET Core 接口文档解决方案(swagger)
    api文档解决方案很多,先介绍我用过的两种方案:比较项SwaggerShowdoc官网帮助说明--ShowDoc知名度较大、net6官方推荐国产在线测试支持不支持文档定义方式注释为主注释为主生成过程自动根据接口参数和返回类型生成相关说明。接口文档的一切都需在......
  • 记一次将 .netcore 项目用 IIS 进程调试
    环境:win10,VisualStudio2022 在.netframework年代,我们都习惯用iis进程调试代码。因为用F5调试代码效率太低下。现在.netcore时代,这种好习惯可不能丢。简单记录一下,我的操作过程。 1.首先用IIS挂载网站,看能不能把发布的好的网站跑起来2.其次用IIS增加网站,......
  • 使用增强版 singleflight 合并事件推送,效果炸裂!
    hello,大家好啊,我是小楼。最近在工作中对Go的singleflight包做了下增强,解决了一个性能问题,这里记录下,希望对你也有所帮助。singleflight是什么singleflight直接翻译为”单(次)飞(行)“,它是对同一种请求的抑制,保证同一时刻相同的请求只有一个在执行,且在它执行期间的相同请求都......
  • airasia Superapp × HMS Core:便捷出行,悦享全程
    2023年5月9日-5月11日,HUAWEIP60系列及旗舰产品发布会在欧洲德国、中东非阿联酋、亚太马来西亚、拉美墨西哥陆续举办,为消费者带来高端影像旗舰HUAWEIP60Pro及系列全场景智能新品。其中在亚太站,还传递了一个重要消息:2023年6月30日之前,购买HUAWEIP60系列及折叠旗舰HUAWEIMateX3......
  • 如何部署ASP.NET Core到Linux服务器
    #如何部署ASP.NETCore到Linux服务器我们开发的最终目的,是将开发后的东西发布网络上,以便自己及其他人使用。本篇博客介绍如果在linux上部署ASP.NETCore应用,使用nginx+systemd来管理我们的应用。##准备-Ubuntu20.04-Nginx-DOTNETSDK或Runtime##安装-......
  • 记录浏览器的bug。Cannot read properties of undefined (reading ‘toLowerCase
    UncaughtTypeError:Cannotreadpropertiesofundefined(reading‘toLowerCase发现是浏览器的bug。浏览器会自动保存表单数据,如果填入表单的时候,点击浏览器保存的数据控制台就会报错。 ......
  • Codeforces 1832F - Zombies(wqs 二分)
    等价于最大化\(n\)对区间的交集之和。而对于每个\([l_i,r_i)\)我们肯定会选择与其交集最大的\([p,p+m)\)与之匹配,所以我们只用对\(k\)个区间进行决策即可。首先先发现一个东西:存在一种最优解,使得对于每个选择的区间\([p,p+m)\),要么有\(p=l_i\),要么有\(p+m=r_i\),也就是......
  • After Effects 2022 Mac软件安装包下载Ae2022Mac安装教程
    安装步骤1,双击打开下载好的安装包。2,选择install双击打开启动安装程序。3,输入电脑密码。4,点击继续。5,软件安装中...6,安装结束点击关闭。7,返回打开的镜像选择激活补丁双击打开。8,点击继续。9,点击安装。10,输入电脑密码。11,安装中...12,安装结束点击关闭。13,打开安装好的软件。14,软件......
  • systemd服务无法产生core文件
    解决思路:1、core的生成路径已被配置,确认非空/proc/sys/kernel/core_pattern2、core文件大小限制也去除了ulimit–c core文件的大小限制也设置成了unlimited3、/proc/sys/fs/suid_dumpable已设置为1,防止非本用户组的文件,无权限导致4、不使用systemctl启动进程,也能产生core......
  • LLMs Fine-tuning 学习笔记(一):trl+peft
    目录1基本信息2实现步骤3代码分析1基本信息From:Fine-tuning20BLLMswithRLHFona24GBconsumerGPU(huggingface.co)Codes:trl/examples/sentiment/scripts/gpt-neox-20b_peftatmain·lvwerra/trl·GitHub相关工具:peft:用于微调大模型的python库官方文档:htt......