學習ASP.NET Core Blazor編程系列三——實體

學習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

 

Tags: