第2部分:在 ASP.NET Core 中將模型新增至 Razor 頁面應用程式

作者:Rick Anderson

在本節中,您可以新增類別來管理資料庫中的電影。 應用程式的模型類別會使用 Entity Framework Core (EF Core) 來處理資料庫。 EF Core 是物件關聯式對應程式 (O/RM) 可簡化資料存取。 您會先撰寫模型類別,EF Core 建立資料庫。

模型類別稱為 POCO 類別 (自 "P>lain-O ld C LR O bjects" ) ,因為它們沒有 EF Core 的相依性。 它們會定義資料儲存在資料庫中的屬性。

檢視或下載範例程式碼 (如何下載)。

新增資料模型

  1. 方案總管 中,以滑鼠右鍵按一下 Razor PagesMovie 專案 ,> 新增 > 資料夾]。 將資料夾命名為 Models

  2. 以滑鼠右鍵按一下 [ 模型 ] 資料夾。 選取 [新增 > 類別]。 將類別命名為 Movie

  3. 將下列屬性新增至 Movie 類別:

    using System;
    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models
    {
        public class Movie
        {
            public int ID { get; set; }
            public string Title { get; set; }
    
            [DataType(DataType.Date)]
            public DateTime ReleaseDate { get; set; }
            public string Genre { get; set; }
            public decimal Price { get; set; }
        }
    }
    

Movie 類別包含:

  • ID 欄位是資料庫對於主索引鍵的必要欄位。

  • [DataType(DataType.Date)][DataType] 屬性指定資料 (的類型 Date) 。 使用此屬性:

    • 使用者不需要在日期欄位中輸入時間資訊。
    • 只會顯示日期,不會顯示時間資訊。

稍後的教學課程會涵蓋 DataAnnotations

建置專案,以確認沒有任何編譯錯誤。

Scaffold 影片模型

在本節中會 scaffold 影片模型。 亦即 Scaffolding 工具會產生影片模型的建立、讀取、更新和刪除 (CRUD) 作業頁面。

  1. 建立 Pages/Movies 資料夾:

    1. 在 [ 頁面 ] 資料夾上按一下滑鼠右鍵 ,> > 新增資料夾]。
    2. 將資料夾命名為 電影
  2. 在 [ 頁面/電影 ] 資料夾上按一下滑鼠右鍵,> 加入 > 新的 scaffold 專案]。

    新增 Scaffold 專案

  3. 在 [新增 Scaffold ] 對話方塊中, Razor 使用 Entity Framework (CRUD) 新增] 選取 [頁面] > ****。

    新增 Scaffold

  4. Razor 使用 ENTITY FRAMEWORK (CRUD) 對話方塊來完成 [新增頁面]:

    1. 在 [ 模型類別 ] 下拉式清單中,選取 [ Movie (Razor PagesMovie])
    2. 在 [資料內容類別] 資料列中,選取 + (加號)。
      1. 在 [ 加入資料內容 ] 對話方塊中, RazorPagesMovie.Data.RazorPagesMovieContext 會產生類別名稱。
    3. 選取 [新增]。

    Add:::非 loc (Razor) ::: Pages

檔案 appsettings.json 會以用來連接到本機資料庫的連接字串進行更新。

建立和更新的檔案

Scaffold 處理序會建立下列檔案:

  • Pages/電影:建立、刪除、詳細資料、編輯和 Index 。
  • Data/ Razor PagesMovieCoNtext .cs

更新的檔案

  • Startup.cs

下一節將說明所建立和更新的檔案。

使用 EF 的遷移功能建立初始資料庫架構

Entity Framework Core 中的「遷移」功能提供了一種方法,可讓您:

  • 建立初始資料庫架構。
  • 以累加方式更新資料庫架構,使其與應用程式的資料模型保持同步。 資料庫中的現有資料會保留下來。

在本節中,會使用 封裝管理員主控台 (PMC) 視窗:

  • 新增初始移轉。
  • 以初始移轉更新資料庫。
  1. 從 [工具] 功能表中,選取 [ NuGet 封裝管理員] > 封裝管理員主控台

    PMC 功能表

  2. 在 PMC 中,輸入下列命令:

    Add-Migration InitialCreate
    Update-Database
    

針對 SQL Server,上述命令會產生下列警告:「未在實體類型 ' Movie ' 上的十進位資料行 ' Price ' 指定類型。 如果它們不符合預設的有效位數和小數位數,會導致以無訊息模式截斷這些值。 使用 'HasColumnType()' 明確指定可容納所有值的 SQL Server 資料行類型。」

略過警告,因為它會在稍後的步驟中解決。

migrations 命令會產生程式碼來建立初始資料庫結構描述。 架構是以中指定的模型為基礎 DbContextInitialCreate 引數用來命名移轉。 您可以使用任何名稱,但依照慣例,會選取描述移轉的名稱。

update 命令會在尚未套用 Up 的遷移中執行方法。 在此情況下,會 update Up 在建立資料庫的 遷移/ <time-stamp> _InitialCreate .cs 檔案中執行方法。

檢查使用相依性插入所註冊的內容

ASP.NET Core 內建相依性插入。 服務(例如 EF Core 資料庫內容)會在應用程式啟動期間以相依性插入來註冊。 需要這些服務的元件 (例如 Razor 頁面) 是透過函式參數提供。 取得資料庫內容執行個體的建構函式程式碼會顯示在本教學課程稍後部分。

「樣板」工具會自動建立資料庫內容,並使用相依性插入容器來註冊它。

檢查 Startup.ConfigureServices 方法。 強調顯示的行由 Scaffolder 新增:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.AddDbContext<RazorPagesMovieContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}

RazorPagesMovieContext協調模型 EF Core 功能,例如建立、讀取、更新和刪除 Movie 。 資料內容 (RazorPagesMovieContext) 衍生自 Microsoft.EntityFrameworkCore.DbContext。 資料內容會指定資料模型包含哪些實體。

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (
            DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

上述程式碼會建立實體集的DbSet <Movie> 屬性。 在 Entity Framework 詞彙中,實體集通常會對應至資料庫資料表。 實體會對應至資料表中的資料列。

連接字串的名稱,會透過對 DbContextOptions 物件呼叫方法來傳遞至內容。 針對本機開發,設定 系統 會從檔案讀取連接字串 appsettings.json

測試應用程式

  1. 執行應用程式,並將 /Movies 附加至瀏覽器中的 URL ( http://localhost:port/movies )。

    如果您收到下列錯誤:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    您遺失了移轉步驟

  2. 測試 Create 連結。

    Create page

    注意

    您可能無法在 Price 欄位中輸入小數逗號。 若要對使用逗號 (",") 作為小數點的非英文地區設定和非英文日期格式支援 jQuery 驗證,則必須將應用程式全球化。 如需全球化指示,請參閱此 GitHub 問題 (英文)。

  3. 測試 [編輯]、[詳細資料] 和 [刪除] 連結。

SQLEntity Framework Core 的記錄

記錄設定通常是由 appsettings 的 Logging 區段所提供。 {Environment}. json 檔案。 若要記錄 SQL 語句,請將檔案新增 "Microsoft.EntityFrameworkCore.Database.Command": "Information"appsettings.Development.js

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDB-2;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
     ,"Microsoft.EntityFrameworkCore.Database.Command": "Information"
    }
  },
  "AllowedHosts": "*"
}

在上述 JSON 中,SQL 語句會顯示在命令列和 Visual Studio 輸出視窗中。

如需詳細資訊,請參閱 .NET Core 與 ASP.NET Core 中的記錄 和此GitHub 問題

下一個教學課程說明 Scaffolding 所建立的檔案。

其他資源

在本節中,會新增類別來管理電影。 應用程式的模型類別會使用 Entity Framework Core (EF Core) 來處理資料庫。 EF Core 是物件關聯式對應程式 (O/RM) 可簡化資料存取。

模型類別稱為 POCO 類別 (來自「簡單的 CLR 物件」),因為它們對 EF Core 沒有任何相依性。 它們會定義資料儲存在資料庫中的屬性。

檢視或下載範例程式碼 (如何下載)。

新增資料模型

以滑鼠右鍵按一下 Razor PagesMovie 專案, > > 新增資料夾]。 將資料夾命名為 Models

以滑鼠右鍵按一下 [ 模型 ] 資料夾。 選取 [新增 > 類別]。 將類別命名為 Movie

將下列屬性新增至 Movie 類別:

using System;
using System.ComponentModel.DataAnnotations;

namespace RazorPagesMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }

        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }
}

Movie 類別包含:

  • ID 欄位是資料庫對於主索引鍵的必要欄位。

  • [DataType(DataType.Date)]DataType 屬性指定資料 (的類型 Date) 。 使用此屬性:

    • 使用者不需要在日期欄位中輸入時間資訊。
    • 只會顯示日期,不會顯示時間資訊。

稍後的教學課程會涵蓋 DataAnnotations

稍後的教學課程會涵蓋 DataAnnotations

建置專案,以確認沒有任何編譯錯誤。

Scaffold 影片模型

在本節中會 scaffold 影片模型。 亦即 Scaffolding 工具會產生影片模型的建立、讀取、更新和刪除 (CRUD) 作業頁面。

建立 Pages/Movies 資料夾:

  • 在 [ 頁面 ] 資料夾上按一下滑鼠右鍵 ,> > 新增資料夾]。
  • 將資料夾命名為 電影

在 [ 頁面/電影 ] 資料夾上按一下滑鼠右鍵,> 加入 > 新的 scaffold 專案]。

VScode 上的新 Scaffold 專案

在 [新增 Scaffold ] 對話方塊中, Razor 使用 Entity Framework (CRUD) 新增] 選取 [頁面] > ****。

在 VScode 上新增 Scaffold

Razor 使用 ENTITY FRAMEWORK (CRUD) 對話方塊來完成 [新增頁面]:

  • 在 [ 模型類別 ] 下拉式清單中,選取 [ Movie (Razor PagesMovie])
  • 在 [ 資料內容類別] 資料 列中,選取 + (加號,) 簽署並變更 PagesMovie 所產生的名稱 Razor 。模型。 RazorPagesMovieCoNtext 至 Razor PagesMovie。資料。 RazorPagesMovieCoNtext. 這不是必要的變更 (英文)。 它會使用正確的命名空間來建立資料庫內容類別。
  • 選取 [新增]。

在 VScode 上新增:::非 loc (Razor) ::: Pages

檔案 appsettings.json 會以用來連接到本機資料庫的連接字串進行更新。

建立的檔案

隨即建立 Scaffold 處理序並更新下列檔案:

  • Pages/電影:建立、刪除、詳細資料、編輯和 Index 。
  • Data/ Razor PagesMovieCoNtext .cs

已更新

  • Startup.cs

下一節將說明所建立和更新的檔案。

初始移轉

在本節中,您可以使用套件管理員主控台 (PMC) 進行下列作業:

  • 新增初始移轉。
  • 以初始移轉更新資料庫。

從 [工具] 功能表中,選取 [ NuGet 封裝管理員] > 封裝管理員主控台

PMC 功能表

在 PMC 中,輸入下列命令:

Add-Migration InitialCreate
Update-Database

上述命令會產生下列警告:「未在實體類型 ' Movie ' 上的十進位資料行 ' Price ' 指定類型。 如果它們不符合預設的有效位數和小數位數,會導致以無訊息模式截斷這些值。 使用 'HasColumnType()' 明確指定可容納所有值的 SQL Server 資料行類型。」

略過警告,因為它會在稍後的步驟中解決。

遷移命令會產生程式碼來建立初始資料庫架構。 架構是以中指定的模型為基礎 DbContextInitialCreate 引數用來命名移轉。 您可以使用任何名稱,但依照慣例,會選取描述移轉的名稱。

update 命令會在尚未套用 Up 的遷移中執行方法。 在此情況下,會 update Up 在建立資料庫的 遷移/ <time-stamp> _InitialCreate .cs 檔案中執行方法。

檢查使用相依性插入所註冊的內容

ASP.NET Core 內建相依性插入。 服務(例如 EF Core 資料庫內容內容)會在應用程式啟動期間以相依性插入來註冊。 需要這些服務的元件(例如 Razor 頁面)是透過函式參數提供。 本教學課程稍後會顯示取得資料庫內容實例的函式程式碼。

「樣板」工具會自動建立資料庫內容內容,並使用相依性插入容器來註冊它。

檢查 Startup.ConfigureServices 方法。 強調顯示的行由 Scaffolder 新增:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.AddDbContext<RazorPagesMovieContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}

RazorPagesMovieContext協調模型 EF Core 功能,例如建立、讀取、更新和刪除 Movie 。 資料內容 (RazorPagesMovieContext) 衍生自 Microsoft.EntityFrameworkCore.DbContext。 資料內容會指定資料模型包含哪些實體。

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (
            DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

上述程式碼會建立實體集的DbSet <Movie> 屬性。 在 Entity Framework 詞彙中,實體集通常會對應至資料庫資料表。 實體會對應至資料表中的資料列。

連接字串的名稱,會透過對 DbContextOptions 物件呼叫方法來傳遞至內容。 針對本機開發,設定 系統 會從檔案讀取連接字串 appsettings.json

測試應用程式

  • 執行應用程式,並將 /Movies 附加至瀏覽器中的 URL ( http://localhost:port/movies )。

如果您收到錯誤:

SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
Login failed for user 'User-name'.

您遺失了移轉步驟

  • 測試 Create 連結。

    Create page

    注意

    您可能無法在 Price 欄位中輸入小數逗號。 若要對使用逗號 (",") 作為小數點的非英文地區設定和非英文日期格式支援 jQuery 驗證,則必須將應用程式全球化。 如需全球化指示,請參閱此 GitHub 問題 (英文)。

  • 測試 [編輯]、[詳細資料] 和 [刪除] 連結。

下一個教學課程說明 Scaffolding 所建立的檔案。

其他資源

在本教學課程中,會新增類別來管理資料庫中的電影。 應用程式的模型類別會使用 Entity Framework Core (EF Core) 來處理資料庫。 EF Core 是物件關聯式對應程式 (O/RM) 可簡化資料存取。 您會先撰寫模型類別,EF Core 建立資料庫。

模型類別稱為 POCO 類別 (自 "P>lain-O ld C LR O bjects" ) ,因為它們沒有 EF Core 的相依性。 它們會定義資料儲存在資料庫中的屬性。

新增資料模型

  1. 方案總管 中,以滑鼠右鍵按一下 Razor PagesMovie 專案 ,> 新增 > 資料夾]。 將資料夾命名為 Models

  2. 以滑鼠右鍵按一下 [ 模型 ] 資料夾。 選取 [新增 > 類別]。 將類別命名為 Movie

  3. 將下列屬性新增至 Movie 類別:

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models
    {
        public class Movie
        {
            public int ID { get; set; }
            public string Title { get; set; } = string.Empty;
    
            [DataType(DataType.Date)]
            public DateTime ReleaseDate { get; set; }
            public string Genre { get; set; } = string.Empty;
            public decimal Price { get; set; }
        }
    }
    

Movie 類別包含:

  • ID 欄位是資料庫對於主索引鍵的必要欄位。

  • 在屬性中指定資料類型的 [DataType] 屬性 ReleaseDate 。 使用此屬性:

    • 使用者不需要在日期欄位中輸入時間資訊。
    • 只會顯示日期,不會顯示時間資訊。

稍後的教學課程會涵蓋 DataAnnotations

建置專案,以確認沒有任何編譯錯誤。

Scaffold 影片模型

在本節中會 scaffold 影片模型。 亦即 Scaffolding 工具會產生影片模型的建立、讀取、更新和刪除 (CRUD) 作業頁面。

  1. 新增「樣板」 Microsoft.EntityFrameworkCore.Design 工具所需的 NuGet 套件。

    1. 從 [工具] 功能表中,選取 [ NuGet 封裝管理員 > 管理解決方案的 NuGet 套件  NuGet 封裝管理員-管理
    2. 選取 [瀏覽] 索引標籤。
    3. 檢查 包含發行 前版本
    4. 輸入 Microsoft.EntityFrameworkCore.Design ,並從清單中選取它。
    5. 檢查 Project 然後選取 [安裝]
    6. 在 [接受 授權] 對話方塊中選取 [我接受]。 NuGet 封裝管理員-新增套件
  2. 建立 Pages/影片 資料夾:

    1. 在 [ 頁面 ] 資料夾上按一下滑鼠右鍵 ,> > 新增資料夾]。
    2. 將資料夾命名為 電影
  3. 在 [ 頁面/電影 ] 資料夾上按一下滑鼠右鍵,> 加入 > 新的 scaffold 專案]。

    新增 Scaffold 專案

  4. 在 [加入新的 Scaffold ] 對話方塊中, Razor 使用 Entity Framework (CRUD) 新增] 選取 [頁面] > ****。

    新增 Scaffold

  5. Razor 使用 ENTITY FRAMEWORK (CRUD) 對話方塊來完成 [新增頁面]:

    1. 在 [ 模型類別 ] 下拉式清單中,選取 [ Movie (Razor PagesMovie])
    2. 在 [資料內容類別] 資料列中,選取 + (加號)。
      1. 在 [ 加入資料內容 ] 對話方塊中, RazorPagesMovie.Data.RazorPagesMovieContext 會產生類別名稱。
    3. 選取 [新增]。

    Add:::非 loc (Razor) ::: Pages

    如果您收到錯誤訊息,指出您需要安裝 Microsoft.EntityFrameworkCore.SqlServer 封裝,請重複步驟,從 [ 加入 > 新的 scaffold 專案] 開始。

檔案 appsettings.json 會以用來連接到本機資料庫的連接字串進行更新。

建立和更新的檔案

Scaffold 處理序會建立下列檔案:

  • Pages/電影:建立、刪除、詳細資料、編輯和 Index 。
  • Data/ Razor PagesMovieCoNtext .cs

下一個教學課程會說明所建立的檔案。

Scaffold 程式會將下列反白顯示的程式碼加入至 Program 檔:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();

builder.Services.AddDbContext<RazorPagesMovieContext>(options => 
       options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production
    // scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

本教學課程稍後會說明 程式的 .cs 變更。

使用 EF 的遷移功能建立初始資料庫架構

Entity Framework Core 中的「遷移」功能提供了一種方法,可讓您:

  • 建立初始資料庫架構。
  • 以累加方式更新資料庫架構,使其與應用程式的資料模型保持同步。 資料庫中的現有資料會保留下來。

在本節中,會使用 封裝管理員主控台 (PMC) 視窗:

  • 新增初始移轉。
  • 以初始移轉更新資料庫。
  1. 從 [工具] 功能表中,選取 [ NuGet 封裝管理員] > 封裝管理員主控台

    PMC 功能表

  2. 在 PMC 中,輸入下列命令:

    Add-Migration InitialCreate
    Update-Database
    
    

針對 SQL Server,上述命令會產生下列警告:

沒有為實體型別 'Movie' 上的十進位資料行 'Price' 指定型別。 如果它們不符合預設的有效位數和小數位數,會導致以無訊息模式截斷這些值。 使用 'HasColumnType()' 明確指定可容納所有值的 SQL 伺服器資料行型別。

略過警告,因為它會在稍後的步驟中解決。

migrations 命令會產生程式碼來建立初始資料庫結構描述。 架構是以中指定的模型為基礎 DbContextInitialCreate 引數用來命名移轉。 您可以使用任何名稱,但依照慣例,會選取描述移轉的名稱。

update 命令會在尚未套用 Up 的遷移中執行方法。 在此情況下,會 update Up 在建立資料庫的 遷移/ <time-stamp> _InitialCreate .cs 檔案中執行方法。

檢查使用相依性插入所註冊的內容

ASP.NET Core 內建相依性插入。 服務(例如 EF Core 資料庫內容)會在應用程式啟動期間以相依性插入來註冊。 需要這些服務的元件 (例如 Razor 頁面) 是透過函式參數提供。 取得資料庫內容執行個體的建構函式程式碼會顯示在本教學課程稍後部分。

「樣板」工具會自動建立資料庫內容,並使用相依性插入容器來註冊它。 Scaffolder 會將下列反白顯示的 程式 代碼加入至 Program 檔案:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();

builder.Services.AddDbContext<RazorPagesMovieContext>(options => 
       options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production
    // scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

資料內容 RazorPagesMovieContext

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

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

上述程式碼會建立實體集的DbSet <Movie> 屬性。 在 Entity Framework 詞彙中,實體集通常會對應至資料庫資料表。 實體會對應至資料表中的資料列。

連接字串的名稱,會透過對 DbContextOptions 物件呼叫方法來傳遞至內容。 針對本機開發,設定 系統 會從檔案讀取連接字串 appsettings.json

建置應用程式

建置應用程式。 編譯器會產生數個 nullable 警告。 .NET 6 的發行版本將會 scaffold 程式碼,而不會出現這些警告。 如需詳細資訊,請參閱此 GitHub 問題可為 null 的參考型別。

修正警告訊息

您可以略過本節並忽略警告。 當 .NET 6 發行時,產生的程式碼將不會包含編譯器警告。

RazorPagesMovieContext 產生下列警告:

警告 CS8618 當結束函式時,不可為 null 的屬性 ' Movie ' 必須包含非 null 的值。 請考慮將屬性宣告為可為 null。

若要修正警告,請套用建議並將 Movie 屬性宣告 為可為 null

        public DbSet<RazorPagesMovie.Models.Movie>? Movie { get; set; }
    }
}

宣告 ? 屬性可為 null。

替代方法是 使用 pragma 語句停用 CS8618 警告:

    public class RazorPagesMovieContext : DbContext
    {
#pragma warning disable CS8618
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
#pragma warning restore CS8618 
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

如需 Razor 頁面 c # 程式碼後向檔案中的警告,請使用 pragma c # 預處理器指示詞來停用警告。 例如,在 Pages/影片/ Index cshtml .cs 檔案中使用下列反白顯示的程式碼:

namespace RazorPagesMovie.Pages.Movies
{
#pragma warning disable CS8618
#pragma warning disable CS8604
    public class IndexModel : PageModel
    {
        private readonly RazorPagesMovie.Data.RazorPagesMovieContext _context;

        public IndexModel(RazorPagesMovie.Data.RazorPagesMovieContext context)
        {
            _context = context;
        }

        public IList<Movie> Movie { get; set; }

        public async Task OnGetAsync()
        {
            Movie = await _context.Movie.ToListAsync();
        }
    }
#pragma warning disable CS8618
#pragma warning disable CS8604
}

Pages/電影/刪除 .cs 檔案需要下列 pragma 語句:

#pragma warning disable CS8618
#pragma warning disable CS8601
#pragma warning disable CS8602
#pragma warning disable CS8604
// Class
#pragma warning restore CS8618
#pragma warning restore CS8601
#pragma warning restore CS8602
#pragma warning restore CS8604

略過 NU1603 套件不符的警告,這些警告會在 .NET 6 發行時修正。

測試應用程式

  1. 執行應用程式,並將 /Movies 附加至瀏覽器中的 URL ( http://localhost:port/movies )。

    如果您收到下列錯誤:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    您遺失了移轉步驟

  2. 測試 Create 連結。

    Create page

    注意

    您可能無法在 Price 欄位中輸入小數逗號。 若要對使用逗號 (",") 作為小數點的非英文地區設定和非英文日期格式支援 jQuery 驗證,則必須將應用程式全球化。 如需全球化指示,請參閱此 GitHub 問題 (英文)。

  3. 測試 [編輯]、[詳細資料] 和 [刪除] 連結。

SQLEntity Framework Core 的記錄

記錄設定通常是由 appsettings 的 Logging 區段所提供。 {Environment}. json 檔案。 若要記錄 SQL 語句,請將檔案新增 "Microsoft.EntityFrameworkCore.Database.Command": "Information"appsettings.Development.js

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDB-2;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
     ,"Microsoft.EntityFrameworkCore.Database.Command": "Information"
    }
  },
  "AllowedHosts": "*"
}

在上述 JSON 中,SQL 語句會顯示在命令列和 Visual Studio 輸出視窗中。

如需詳細資訊,請參閱 .NET Core 與 ASP.NET Core 中的記錄 和此GitHub 問題

下一個教學課程說明 Scaffolding 所建立的檔案。

使用完成的範例進行疑難排解

若您遇到無法解決的問題,請將您的程式碼與已完成的專案進行比較。 查看或下載已完成的專案 (如何下載) 。

其他資源