.net5 core Razor項目實戰系列之三:使用EntityFramework生成數據訪問實體


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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM