前言 接上期文章《.NET6項目連接資料庫方式方法》,有人問了我幾個問題,現在就這幾個問題,拓展延申一下創建實體類、資料庫。把ORM框架和數據遷移都寫進去。 安裝ORM框架,這裡我們採用EFCore 安裝EFCore 我的項目是在Linux上創建的,使用的是vscode開發工具遠程開發。為了方便大家 ...
前言
接上期文章《.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操作資料庫基本增刪改查