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

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

时间:2023-05-18 13:55:40浏览次数:64  
标签: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操作数据库基本增删改查

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

相关文章

  • 正点原子Linux第31章《Uboot顶层Makefile详解》学习
    uboot目录结构1. 文件夹arch:存放关于CPU架构的代码2. 文件夹board:存放关于特定开发板的代码3. 文件夹configs:存放uboot的配置,文件的格式为:xxxxx.deconfig,通过编译(make),生成.config文件。4. 文件u-boot.xxx,大多数为编译相关的或者编译生成的目标文件,例如uboot.imx等等......
  • this.$refs.ref值.toggleRowExpansion is not a function的解决方法
    el-table点击行也能够打开子表,开始搞了个静态(子表)的可以的。但是现次执行这个方法,就报错了。<el-tablev-loading="loading":data="item.steps"style="border-radius:0px!important;"ref="stepTable"......
  • XAF EFCore 示例
    前言在DEV官方建议创建新的XAF项目推荐选择EFCore时,我也第一时间创建了XAF的EFCore项目,这也是我第一次创建这个类型的项目,之前一直使用XPO,避免不了要对比一下。如果熟悉XPO但不了解EFCore的小伙伴来说,会有些迷茫,再加上通过向导创建的项目并不是开箱即用,还需要进行配置,可能会打击......
  • 【愚公系列】2023年05月 .NET CORE工具案例-对象映射Master的使用
    (文章目录)前言对象映射框架Master可以帮助开发人员将对象映射到数据库,以进行数据持久化。它还可以支持ORM(对象关系映射),以及其他数据库技术,比如存储过程。它可以帮助开发人员更快、更有效地完成数据库操作。Master官网:https://github.com/MapsterMapper/Mapster一、对象映射m......
  • Codeforces Round 868 (Div. 2) A-D
    CodeforcesRound868(Div.2) A.A-characteristicintfac[N];map<int,int>mp;voidinit(){fac[1]=0;mp[0]=1;for(inti=2;i<N;i++){fac[i]=fac[i-1]+(i-1);mp[fac[i]]=i;}}voidsolve(){intn=read(),k=rea......
  • ASP.NET Core Swagger接入使用IdentityServer4 的 WebApi
    写在前面是这样的,我们现在接口使用了Ocelot做网关,Ocelot里面集成了基于IdentityServer4的开发的授权中心用于对Api资源的保护。问题来了,我们的Api用了SwaggerUI做接口的自文档,那就蛋疼了,你接入了IdentityServer4的Api,用SwaggerUI调试、调用接口的话,妥妥的401,未授权啊。那有小伙伴就......
  • forwardRef 与 connect一起使用出现的问题
    今天在项目中发现使用forwardRef转发用conenct包裹的组件,怎么都拿不到提供给父组件的方法,百思不得其解。最后看到了这篇文章  React.forwardRef和connect的联合使用问题 才知道。 原来是这里惹的祸。还有,像这种高阶组件。connect要在第一层,forwardRef在第二层。  ......
  • .net core 自颁发ssl证书,及客户端证书验证
    .netcore自颁发ssl证书,及客户端证书验证openshell颁发证书:先下载openshell,下载地址:https://slproweb.com/products/Win32OpenSSL.htmlopensslgenrsa-outserver.key2048opensslx509-req-inserver.csr-outserver.crt-signkeyserver.key-days36500opensslpk......
  • Putty连接虚拟机(在win11中安装的ubuntu20.04)提示: Network error: Connection refus
    #开启防火墙sudoufwenable#开启22号端口sudoufwallow22#重启防火墙sudoufwreload#查看状态sudoufwstatus#安装sshsudoaptinstallopenssh-server#尝试能否远程登录sshlocalhost......
  • OneFastClient客户端用SuperAdmin登录提示用户不存在?
    原因:服务器端没设超管密码解决办法:......