EntityFramework是一種ORM框架,能夠將數據庫表的操作對應到實體上,
而不需要像傳統的ADO.NET那樣用Connection、Command、DataReader、DataSet等對象結合SQL去操作數據庫,
一個實體就是一個c#類,只不過這個類比較特殊,只有屬性,沒有方法。
下面我們就用EntityFrameworkCore(對應.net core)來進行數據庫操作,以便后續在完成頁面功能的時候使用。
第一步:使用NuGet包管理器在項目中引入EntityFrameworkCore.Tools

引用這個包的作用是使用"Scaffold-DbContext"命令自動生成實體類,后面會介紹具體怎么使用。
第二步:使用NuGet包管理器在項目中引入 Pomelo.EntityFrameworkCore.MySql

這個包是來處理MySql數據庫的,如果是使用的SQL Server數據庫,則要換成引入 Microsoft.EntityFrameworkCore.SqlServer 包,這是微軟官方提供的。
第三步:在程序包管理器控制台中執行“Scaffold-DbContext”命令來生成實體。
生成實體前的目錄結構是這樣的:

打開程序包管理控制台:

在控制台窗口中輸入命令 Scaffold-DbContext "server=127.0.0.1;database=auth_manage;port=3306;user=root;password=1234;
Character Set=utf8mb4" Pomelo.EntityFrameworkCore.MySql -OutputDir DbUtil/Entity 並按Enter鍵:

Scaffold-DbContext命令中各參數含義如下:
(1)"server=127.0.0.1;database=auth_manage;port=3306;user=root;password=1234;Character Set=utf8mb4" 是數據庫連接字符串。
(2)Pomelo.EntityFrameworkCore.MySql是目標數據庫對應EF操作包。
(3)-OutputDir DbUtil/Entity 是將生成的實體輸出到DbUtil文件夾下的 Entity文件夾,如果文件夾不存在會自動創建。
執行完畢后解決方案目錄下生成了對應的實體類,如下:

任意點開一個實體類文件,如TAuth.cs,其代碼如下:
using System; using System.Collections.Generic; #nullable disable namespace AuthManagement.DbUtil.Entity { public partial class TAuth { public int AuthId { get; set; } public short TargetType { get; set; } public int TargetId { get; set; } public string FuncCode { get; set; } public DateTime CreateTime { get; set; } public DateTime? ModifyTime { get; set; } } }
和我們在數據庫中定義的表一致。
接下來,我們對這些類做適當的改進,以滿足我們項目的要求。
(1)改造auth_manageContext類,將其命名為 AuthDbContext 以符合c#的命名規則,如下圖:

(2)對每個實體類增加 [Serializable] 特性以便序列化后寫入t_log表,如下紅色標識:
using System; using System.Collections.Generic; #nullable disable namespace AuthManagement.DbUtil.Entity { [Serializable] public partial class TAuth { public int AuthId { get; set; } public short TargetType { get; set; } public int TargetId { get; set; } public string FuncCode { get; set; } public DateTime CreateTime { get; set; } public DateTime? ModifyTime { get; set; } } }
最后一步:對 AuthDbContext 做依賴注入的配置。
因為用 AuthDbContext 對數據庫做增刪改查時需要實例化 AuthDbContext context = new AuthDbContext(),
我們可以在 xxx.cshtml.cs 文件中實例化,但在.net core中更好的解決方法是在 Startup.cs 中進行依賴注入,代碼如下:
public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); //for SQL Server //services.AddDbContext<AuthDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MySql"))); //for MySql services.AddDbContext<AuthDbContext>(options => options.UseMySql(
Configuration.GetConnectionString("MySql"),ServerVersion.AutoDetect(Configuration.GetConnectionString("MySql")))); }
上面用到了數據庫連接,所以還要在appsettings.json中配置連接字符串,代碼如下:
"ConnectionStrings": { "MySql": "server=127.0.0.1;database=auth_manage;port=3306;user=root;password=1234;Character Set=utf8mb4" },
至此,數據庫的訪問就配置完成了,要了解EF Core更詳細的用法,可以訪問微軟官網:
https://docs.microsoft.com/zh-cn/ef/core/
