環境與版本
作業系統:Window10 64x 版本:2004
開發軟件(IDE):Visual Studio 2019 Community
.NET版本:ASP.NET Core 3.1
專案架構:MVC
資料庫產品版本:SQL Server 2014 Express Edition (64-bit)
資料庫版本編號:12.0.2000.8
範本參考
繼上篇[C#學習]ASP.NET CORE MVC 檢視(VIEW) 使用與範本 進行延續學習使用範本
新增資料模型類別
在創建Models資料夾下創建Movie.cs
使用下列程式碼更新 Movie.cs 檔案:
using System; using System.ComponentModel.DataAnnotations; namespace MvcMovie.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; } } }
第9行 Id 欄位是資料庫的必要欄位,將作為主索引鍵。
第11行 DataType上的屬性 ReleaseDate
指定資料 (Date的類型 ) 。 使用此屬性:
- 使用者不需要在日期欄位中輸入時間資訊。
- 只會顯示日期,不會顯示時間資訊。
新增 NuGet 套件
NuGet是一個自由開源軟體包管理系統。用於Microsoft開發平台。以前稱NuPack。針對. NET (包括. NET Core),Microsoft 支援的共用程式碼機制
在工具->NuGet套件管理員->PMC(Package Magament Console 套件管理器主控台)
輸入以下 安裝程式碼
Install-Package Microsoft.EntityFrameworkCore.SqlServer
命令會新增 EF Core SQL Server 提供者。 提供者套件會將 EF Core 套件作為相依性安裝。
建立資料庫內容類別
資料庫內容類別是使用MvcMovie/Models/Movie.cs 的模型(必要) ,使用EF Core 產生功能 (建立C、讀取R、更新U、刪除D) 。
建立Model/Data/MvcMovieContext.cs,並新增以下內容:
using Microsoft.EntityFrameworkCore; using MvcMovie.Models; namespace MvcMovie.Data { public class MvcMovieContext : DbContext { public MvcMovieContext (DbContextOptions<MvcMovieContext> options) : base(options) { } public DbSet<Movie> Movie { get; set; } } }
第13行 程式碼內DbSet <Movie> 會建立實體集。 在 Entity Framework 詞彙中,實體集通常會對應至資料庫資料表。 實體會對應至資料表中的資料列。
登錄資料庫內容
ASP.NET Core 內建相依性插入 (DI)。 服務 (例如 EF Core 資料庫內容) 必須在應用程式啟動期間向 DI 進行註冊。 需要這些服務的元件 (例如 Razor 頁面) 是透過函式參數提供這些服務。 取得資料庫內容執行個體的建構函式程式碼。
在 Startup.cs 最上方新增下列 using 陳述式:
using MvcMovie.Data; using Microsoft.EntityFrameworkCore;
在 Startup.ConfigureServices 中新增下列第5~6行的程式碼:
public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddDbContext<MvcMovieContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext"))); }
連接字串的名稱,會透過對 DbContextOptions 物件呼叫方法來傳遞至內容。 作為本機開發之用,ASP.NET Core configuration system 會從 appsettings.json 檔案讀取連接字串。
新增資料庫連線字串
將13~14行連接字串新增至檔案 * 上的appsettings.js* :
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", //"ConnectionStrings": { // "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-1;Trusted_Connection=True;MultipleActiveResultSets=true" //}, "ConnectionStrings": { "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;Trusted_Connection=True;MultipleActiveResultSets=true" } }
使用 scaffolding 程式碼產生器
使用 scaffolding 工具來為影片模型產生建立、讀取、更新和刪除 (CRUD) 頁面。
模型類別: Movie (MvcMovie.Models)
資料內容類別: MvcMovie.Data.MvcMovieContext.cs (MvcMovie 的資料)
檢視: 保持核取預設的每一個選項
控制器名稱: 保留預設值 MoviesController
選取 [新增]
接下來Visual Studio就會自動會建立:
- Controllers/MoviesController.cs
- Razor 查看建立、刪除、詳細資料、編輯和索引頁面的檔案 (Views/Movies/ * cshtml)
自動建立這些檔案的流程稱為 scaffolding。
初始移轉
使用 EF Core 的 移轉 功能來建立資料庫。 移轉是一組工具,可讓您建立和更新資料庫,使其與您的資料模型相符。
從 [工具]功能表中,選取 [NuGet 套件管理員] >[套件管理器主控台Package Manager Console](PMC)。
輸入下列命令:
Add-Migration InitialCreate Update-Database
Add-Migration InitialCreate
:產生 migrations/{timestamp} _InitialCreate .cs 遷移用的檔案。InitialCreate
引數是移轉名稱。 您可以使用任何名稱,但依照慣例,會選取描述移轉的名稱。 因為這是第一次移轉,所產生類別會包含建立資料庫結構描述的程式碼。 資料庫結構描述是以MvcMovieContext
類別為基礎。Update-Database
:將資料庫更新為先前命令所建立的最新遷移。 此命令會執行 Migrations/{time-stamp}_InitialCreate.cs 檔案中的Up
function,其會建立資料庫。
檢查 Migrations/{timestamp}_InitialCreate.cs 移轉檔案:
public partial class Initial : Migration { protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "Movie", columns: table => new { Id = table.Column<int>(nullable: false) .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), Title = table.Column<string>(nullable: true), ReleaseDate = table.Column<DateTime>(nullable: false), Genre = table.Column<string>(nullable: true), Price = table.Column<decimal>(nullable: false) }, constraints: table => { table.PrimaryKey("PK_Movie", x => x.Id); }); } protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "Movie"); } }
Up 方法會建立 Movie 資料表,並將 Id 設為主索引鍵。 Down 方法會還原 Up 移轉所做的結構描述變更。
測試應用程式
開啟應用程式,然後按一下 [Movie App]**** 連結。
以上為測試Create、Edit、Details 和 Delete 頁面。
控制器中的相依性插入(Dependency Injection,DI)
Controllers/MoviesController.cs 檔案,並檢查建構函式:
public class MoviesController : Controller { private readonly MvcMovieContext _context; public MoviesController(MvcMovieContext context) { _context = context; }
建構函式會使用相依性插入將資料庫內容 (MvcMovieContext
) 插入到控制器中。 控制器中的每一個 CRUD 方法都會使用資料庫內容。
參考資料:
第4部分:將模型新增至 ASP.NET Core MVC 應用程式https://docs.microsoft.com/zh-tw/aspnet/core/tutorials/first-mvc-app/adding-view?view=aspnetcore-3.1&tabs=visual-studio
如需 EF Core PMC 工具的詳細資訊,請參閱 EF Core 工具參考 – Visual Studio 中的 PMC。
Pingback: [C#學習]ASP.NET Core MVC 應用程式中的資料庫 使用與範本 - Steven玄