學習ASP.NET Core Blazor程式設計系列三——實體

2022-09-19 06:06:00
學習ASP.NET Core Blazor程式設計系列二——第一個Blazor應用程式(下) 
 
 

        從本篇文章開始我們從頭開始學習如何建立一個圖書租賃系統。

       在本篇文章中我們先來學習建立一個書籍資訊的實體類,並且通過實體框架(EF Core)使用這個書籍實體類來處理書籍資訊資料。

      EF Core是一個輕量化、可延伸、開源和跨平臺的物件關係對映(ORM)框架,它簡化了編寫資料庫存取的程式碼。EF Core支援多個資料庫引擎。

       EF Core使用模型執行資料存取。模型是由實體類和表示資料庫對談的上下文物件構成。上下文物件允許查詢並儲存資料。

        建立的實體類被稱為POCO類(「普通的CLR物件」)因為他們沒有在EF Core中有任何依賴。它們定義儲存在資料庫中的資料的屬性。

 一、新增一個實體類

  1. 在Visual Studio 2022的解決方案資源管理器中,右鍵單擊該RlazorAppDemo,在彈出選單中選擇專案-->新增-->新建資料夾,修改資料夾名稱為「Models」。如下圖。

  2. 在Visual Studio 2022的解決方案資源管理器中,滑鼠右鍵單擊「Models」資料夾。在彈出選單中選擇,新增-->類。類名為Book。如下圖。

  3.在book類中的程式碼檔案中新增以下屬性 。

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;


namespace BlazorAppDemo.Models
{
    public class Book
    {
        private string name = String.Empty;
        private string author=String.Empty;

        [Key]
        public int ID { get; set; }
        public string Name { get => name; set => name = value; }
        public DateTime ReleaseDate { get; set; }
        public string Author { get => author; set => author = value; }
        public decimal Price { get; set; }
        /// <summary>
        /// 圖書型別編號
        /// </summary>
        public string Type { get; set; }
        /// <summary>
        /// 頁碼
        /// </summary>
        public int TotalPages { get; set; }
        /// <summary>
        /// 庫存數量
        /// </summary>
        public int StockQty { get; set; }
        /// <summary>
        /// 現存量
        /// </summary>
        public int Qty { get; set; }
        
    }
} 

   其中ID欄位必須是資料庫中表Book的主鍵。

 二、新增資料庫上下文類

        在Visual Studio 2022的解決方案資源管理器中,滑鼠右鍵單擊「Models」資料夾。在彈出選單中選擇,新增-->類。類名為BookContext.cs類,繼承自DbContext,操作方式如上第2點中的圖所示,程式碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
 

namespace BlazorAppDemo.Models
{

    public class BookContext:DbContext

    {
        public BookContext(DbContextOptions<BookContext> options)

               : base(options)

        {           

        }
 
        public DbSet<Book> Book { get; set; }

    }
}

 
  之前的程式碼中我們建立了一個DbSet<Book>型別的屬性Book.在實體框架中,實體集合通過對應資料庫中的表,實體對應表中的行。

  三、新增資料庫連線字串

   在Visual Studio 2022中的資源管理器中找到appsettings.json檔案,用滑鼠雙擊開啟,在檔案中新增一個連線字串,程式碼如下。


{

  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }

  },

  "ConnectionStrings": {
    "BookContext": "Server=.;Database=Books;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
    "AllowedHosts": "*"

  }  

四、註冊資料庫上下文

1.程式碼寫到這時,我們發現剛才寫的程式碼,特別是BookContext.cs中的程式碼,如下圖紅框處,出現了波浪線。這表明我們的依賴項中沒有EntityFrameCore相關的元件。

 

 

2.在Visual Studio 2022的資源管理器中,在「依賴項」上點選滑鼠右鍵,在彈出選單中選擇「管理Nuget程式包」。如下圖。

 

3.在瀏覽介面的搜尋方塊中輸入以下四個包的名稱。如下圖。找到之後分別安裝好。

4. 在Visual Studio 2022中的資源管理器中,滑鼠右鍵單擊「Data資料夾。在彈出選單中選擇,新增-->類。類名為ConfigHelper。這個類用來讀取appsettings.json檔案中的設定資訊。程式碼如下。

 

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json; 

namespace BlazorAppDemo.Data
{

    public class ConfigHelper

    {
    

        public static IConfiguration Configuration { get; set; }

        static ConfigHelper ()
        {

            //ReloadOnChange = true 當appsettings.json被修改時重新載入         

            Configuration = new ConfigurationBuilder()
            .Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
            .Build();
        } 
}
} 

 

5. 在Visual Studio 2022中的資源管理器中找到Program.cs檔案,用滑鼠雙擊開啟,在Program.cs檔案的var app = builder.Build();這一行程式碼前面寫入依賴注入容器註冊資料庫上下文的程式碼,具體程式碼如下。
builder.Services.AddDbContextFactory<BookContext>(opt =>
opt.UseSqlServer(JsonHelper.Configuration["ConnectionStrings:BookContext"]));

 6. 最後,在Visual Studio 2017中的選單中選擇「生成-->生成解決方案」對專案進行編譯,以驗證自己寫的程式碼沒有任何錯誤同。

 五、EFCore支援的資料庫

      每個DbContext範例都必須設定為使用一個且僅一個資料庫提供程式。(DbContext子型別的不同範例可用於不同的資料庫提供程式,但單個範例只能使用一個。)使用特定的 Use*" 呼叫設定資料庫提供程式。例如,上面程式碼中我們使用SQL Server資料庫提供程式。

builder.Services.AddDbContextFactory<BookContext>(opt =>
opt.UseSqlServer(JsonHelper.Configuration["ConnectionStrings:BookContext"]));
  這些 Use*" 方法是由資料庫提供程式實現的擴充套件方法。 這意味著必須先安裝資料庫提供程式 NuGet 包,然後才能使用擴充套件方法。

  EF Core 資料庫提供程式廣泛使用擴充套件方法。下表包含常見資料庫提供程式的範例:

 

設定範例

NuGet 程式包

SQL Server 或 Azure SQL

.UseSqlServer(connectionString)

Microsoft.EntityFrameworkCore.SqlServer

Azure Cosmos DB

.UseCosmos(connectionString, databaseName)

Microsoft.EntityFrameworkCore.Cosmos

SQLite

.UseSqlite(connectionString)

Microsoft.EntityFrameworkCore.Sqlite

EF Core 記憶體中資料庫

.UseInMemoryDatabase(databaseName)

Microsoft.EntityFrameworkCore.InMemory

PostgreSQL*

.UseNpgsql(connectionString)

Npgsql.EntityFrameworkCore.PostgreSQL

MySQL/MariaDB*

.UseMySql((connectionString)

Pomelo.EntityFrameworkCore.MySql

Oracle*

.UseOracle(connectionString)

Oracle.EntityFrameworkCore