在本節(jié)中,添加了用于管理數(shù)據(jù)庫中的電影的類。 這些類與 Entity Framework Core(EF Core)一起使用來處理數(shù)據(jù)庫。 EF Core 是一種對(duì)象關(guān)系映射 (ORM) 框架,可以簡(jiǎn)化數(shù)據(jù)訪問代碼。
模型類稱為 POCO 類(源自“簡(jiǎn)單傳統(tǒng) CLR 對(duì)象”),因?yàn)樗鼈兣c EF Core 沒有任何依賴關(guān)系。 它們定義數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù)屬性。
查看或下載示例。
右鍵單擊“RazorPagesMovie”項(xiàng)目 >“添加” > “新建文件夾”。 將文件夾命名為“Models”。
右鍵單擊“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
類包含:
數(shù)據(jù)庫需要 ID
字段以獲取主鍵。
[DataType(DataType.Date)]
:DataType 屬性指定數(shù)據(jù)的類型(日期)。 通過此特性:
DataAnnotations 會(huì)在后續(xù)教程中介紹。
生成項(xiàng)目以驗(yàn)證沒有任何編譯錯(cuò)誤。
在此部分,將搭建“電影”模型的基架。 確切地說,基架工具將生成頁面,用于對(duì)“電影”模型執(zhí)行創(chuàng)建、讀取、更新和刪除 (CRUD) 操作。
創(chuàng)建“Pages/Movies”文件夾:
右鍵單擊 Pages/Movies 文件夾 >“添加” > “新搭建基架的項(xiàng)目”。
在“添加基架”對(duì)話框中,選擇“使用實(shí)體框架生成 Razor Pages (CRUD)” > “添加”。
完成“使用實(shí)體框架(CRUD)添加 Razor Pages”對(duì)話框:
appsettings.json 文件通過用于連接到本地?cái)?shù)據(jù)的連接字符串進(jìn)行更新。
在搭建基架時(shí),會(huì)創(chuàng)建并更新以下文件:
創(chuàng)建和更新的文件將在下一節(jié)中說明。
在此部分中,程序包管理器控制臺(tái) (PMC) 用于:
從“工具”菜單中,選擇“NuGet 包管理器” > “包管理器控制臺(tái)”。
在 PMC 中,輸入以下命令:
Add-Migration Initial
Update-Database
前面的命令生成以下警告:“No type was specified for the decimal column 'Price' on entity type 'Movie'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'.”
你可以忽略該警告,它將后面的教程中得到修復(fù)。
ef migrations add InitialCreate 命令生成用于創(chuàng)建初始數(shù)據(jù)庫架構(gòu)的代碼。 此架構(gòu)的依據(jù)為 DbContext 中指定的模型(在 RazorPagesMovieContext.cs 文件中)。 InitialCreate 參數(shù)用于為遷移命名。 可以使用任何名稱,但是按照慣例,會(huì)選擇可說明遷移的名稱。
ef database update 命令在 Migrations/<time-stamp>_InitialCreate.cs 文件中運(yùn)行 Up 方法。 Up方法會(huì)創(chuàng)建數(shù)據(jù)庫。
ASP.NET Core 通過依賴關(guān)系注入進(jìn)行生成。 服務(wù)(例如 EF Core 數(shù)據(jù)庫上下文)在應(yīng)用程序啟動(dòng)期間通過依賴關(guān)系注入進(jìn)行注冊(cè)。 需要這些服務(wù)(如 Razor 頁面)的組件通過構(gòu)造函數(shù)提供相應(yīng)服務(wù)。 本教程的后續(xù)部分介紹了用于獲取 DB 上下文實(shí)例的構(gòu)造函數(shù)代碼。
基架工具自動(dòng)創(chuàng)建 DB 上下文并將其注冊(cè)到依賴關(guān)系注入容器。
檢查 Startup.ConfigureServices
方法。 基架添加了突出顯示的行:
// This method gets called by the runtime.
// Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is
// needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("RazorPagesMovieContext")));
}
RazorPagesMovieContext
為 Movie
模型協(xié)調(diào) EF Core 功能(創(chuàng)建、讀取、更新、刪除等)。 數(shù)據(jù)上下文 (RazorPagesMovieContext
) 派生自 Microsoft.EntityFrameworkCore.DbContext。 數(shù)據(jù)上下文指定數(shù)據(jù)模型中包含哪些實(shí)體。
using Microsoft.EntityFrameworkCore;
namespace RazorPagesMovie.Models
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
}
}
前面的代碼為實(shí)體集創(chuàng)建 DbSet<Movie>
屬性。 在實(shí)體框架術(shù)語中,實(shí)體集通常與數(shù)據(jù)表相對(duì)應(yīng)。 實(shí)體對(duì)應(yīng)表中的行。
通過調(diào)用 DbContextOptions 對(duì)象中的一個(gè)方法將連接字符串名稱傳遞到上下文。 進(jìn)行本地開發(fā)時(shí), ASP.NET Core 配置系統(tǒng) 在 appsettings.json 文件中讀取數(shù)據(jù)庫連接字符串。
Add-Migration 命令生成用于創(chuàng)建初始數(shù)據(jù)庫架構(gòu)的代碼。 此架構(gòu)的依據(jù)為 RazorPagesMovieContext中指定的模型(在 Data/RazorPagesMovieContext.cs 文件中)。 Initial 參數(shù)用于為遷移命名。 可以使用任何名稱,但是按照慣例,會(huì)使用可說明遷移的名稱。 有關(guān)更多信息,請(qǐng)參見教程:使用遷移功能 - ASP.NET MVC 和 EF Core。
Update-Database 命令在用于創(chuàng)建數(shù)據(jù)庫的 Migrations/{time-stamp}_InitialCreate.cs 文件中運(yùn)行 Up方法。
如果收到錯(cuò)誤:
console
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
Login failed for user 'User-name'.
缺少遷移步驟。
備注可能無法在 Price 字段中輸入十進(jìn)制逗號(hào)。 若要使 jQuery 驗(yàn)證支持使用逗號(hào)(“,”)表示小數(shù)點(diǎn)的非英語區(qū)域設(shè)置,以及支持非美國英語日期格式,應(yīng)用必須進(jìn)行全球化。 有關(guān)全球化的說明,請(qǐng)參閱
此 GitHub 問題。
更多建議: