经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
.NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移
来源:cnblogs  作者:lym003  时间:2023/5/19 9:12:46  对本文有异议

前言

接上期文章《.NET6项目连接数据库方式方法》,有人问了我几个问题,现在就这几个问题,拓展延申一下创建实体类、数据库。把ORM框架和数据迁移都写进去。

安装ORM框架,这里我们采用EFCore

安装EFCore

我的项目是在Linux上创建的,使用的是vscode开发工具远程开发。为了方便大家阅读和操作,我将项目down到我的本地电脑(Windows10系统),使用专业的.NET开发工具Visual Studio开发。
在这里插入图片描述

创建实体类


添加完以后的解决方案是这样的
User.cs类的内容如下:

  1. using Microsoft.EntityFrameworkCore.Metadata.Internal;
  2. using System.ComponentModel.DataAnnotations;
  3. using System.ComponentModel.DataAnnotations.Schema;
  4. namespace test.Models
  5. {
  6. public class User
  7. {
  8. [Key] //数据库主键
  9. public int UserId { get; set; }
  10. [Column(TypeName = "nvarchar(100)")]
  11. public string UserName { get; set; }
  12. [Column(TypeName = "nvarchar(100)")]
  13. public string UserPwd { get; set; }
  14. public int UserAge { get; set; }
  15. [Column(TypeName = "nvarchar(200)")]
  16. public string? UserAddress { get; set; }
  17. }
  18. }

创建数据上下文类

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

在这里插入图片描述

创建操作主库的数据上下文MyDataBaseContext_main.cs并继承数据上下文DbContext

操作主库的动作有添加、修改、删除,如图所示:
在这里插入图片描述

代码如下:

  1. using Microsoft.EntityFrameworkCore;
  2. using test.Models;
  3. namespace test.MyDataBaseContext
  4. {
  5. public class MyDataBaseContext_mian : DbContext
  6. {
  7. //添加User类
  8. public DbSet<User> Users { get; set; }
  9. //构造函数
  10. public MyDataBaseContext_mian(DbContextOptions<MyDataBaseContext_mian> option) : base(option)
  11. {
  12. }
  13. }
  14. }

创建操作从库的数据上下文MyDataBaseContext_from.cs并继承数据上下文DbContext

操作主库的动作只有查询,如图所示:
在这里插入图片描述
代码如下:

  1. using Microsoft.EntityFrameworkCore;
  2. using test.Models;
  3. namespace test.MyDataBaseContext
  4. {
  5. public class MyDataBaseContext_from : DbContext
  6. {
  7. //添加User类
  8. public DbSet<User> Users { get; set; }
  9. //构造函数
  10. public MyDataBaseContext_from(DbContextOptions<MyDataBaseContext_from> option) : base(option)
  11. {
  12. }
  13. }
  14. }

添加连接字符串配置

按照上一篇文章《.NET6项目连接数据库方式方法》的方式方法首先在appsettings文件中添加连接数据库字符串二,便于大家区分,写成这样:
在这里插入图片描述

  1. "ConnectionStrings": {
  2. "MySqlDataBase": "Server=192.168.11.82;Port=3306;User Id=ymliu;Password=ymliu2023;Database=BlogDataBase",
  3. "MySqlDataBase2": "Server=192.168.11.82;Port=3306;User Id=ymliu;Password=ymliu2023;Database=BlogDataBase2"
  4. }

其次在Program.cs文件中注册服务,需要注意的是,我们需要注册两个数据上下文。才能实现读写分离,如图所示:
在这里插入图片描述
代码如下:

  1. //注册操作主库的数据上下文
  2. builder.Services.AddDbContext<MyDataBaseContext_mian>(
  3. options =>
  4. {
  5. options.UseMySql(builder.Configuration.GetConnectionString("MySqlDataBase"), new MySqlServerVersion(new Version(8, 0, 31)));
  6. });
  7. //注册操作从库的数据上下文
  8. builder.Services.AddDbContext<MyDataBaseContext_from>(
  9. options =>
  10. {
  11. options.UseMySql(builder.Configuration.GetConnectionString("MySqlDataBase2"), new MySqlServerVersion(new Version(8, 0, 31)));
  12. });

开始迁移

在NuGet程序包上搜索安装下面这两个包,Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Design
在这里插入图片描述
开始迁移,点击工具,NuGet包管理器,程序包管理器控制台,打开控制台。因为我们有两个DbConext,直接使用Add-Migration命令会报如下错误。
在这里插入图片描述
因此我们需要分开操作,操作方式如下:
首先操作主库的上下文:

  1. # 数据迁移
  2. add-migration testDataBaseMigraMain -c MyDataBaseContext_mian -o test/DataMigra/main
  3. # 更新到数据库
  4. Update-Database -Context MyDataBaseContext_mian

其次操作从库的上下文:

  1. # 数据迁移
  2. add-migration testDataBaseMigraFrom -c MyDataBaseContext_from -o test/DataMigra/from
  3. # 更新到数据库
  4. 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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号