注
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、 .NET および .NET Core サポート ポリシーを参照してください。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
重要
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
このチュートリアルでは、データベースの映画を管理するためのクラスが追加されます。 アプリのモデル クラスでは、Entity Framework Core (EF Core) を使用して、データベースを操作します。 EF Core は、データ アクセスを簡略化するオブジェクト リレーショナル マッパー (O/RM) です。 モデル クラスを記述すると、EF Core によってデータベースが作成されます。
モデル クラスは に対する依存関係がないため、Plain-Old CLR EF Corebjects (単純な従来の CLR) の頭文字を取って POCO クラスと呼ばれます。 これらは、データベースに格納されるデータのプロパティを定義します。
データ モデルの追加
ソリューション エクスプローラーで、RazorPagesMovie プロジェクトを右クリックし、>[追加]>[新しいフォルダー] の順に選択します。 フォルダーに「
Models
で行うことができます。Models
フォルダーを右クリックしします。 [追加]>[クラス] の順に選択します。 クラスに Movie と名前を付けます。Movie
クラスに次のプロパティを追加します。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
フィールドは、データベースで主キー用に必要です。プロパティのデータの型を指定する
ReleaseDate
属性。 この属性を使用する場合:- ユーザーは日付フィールドに時刻の情報を入力する必要はありません。
- 日付のみが表示され、時刻の情報は表示されません。
string
の後の疑問符は、そのプロパティが Null 許容であることを示します。 詳細については、「null 許容参照型」を参照してください。
DataAnnotations は、後のチュートリアルで説明されます。
プロジェクトをビルドして、コンパイル エラーがないことを確認します。
ムービー モデルのスキャフォールディング
このセクションでは、ムービー モデルがスキャフォールディングされます。 つまり、スキャフォールディング ツールにより、ムービー モデルの作成、読み取り、更新、削除の (CRUD) 操作用のページが生成されます。
Pages/Movies フォルダーを作成します。
- Pages フォルダーを右クリックし、>> の順に選択します。
- フォルダーに Movies という名前を付けます。
Pages/Movies フォルダーを右クリックし、>> の順に選択します。
[新しいスキャフォールディングの追加] ダイアログで、[Entity Framework を使用する Razor Pages (CRUD)]>[追加] の順に選択します。
[Add Razor Pages using Entity Framework (CRUD)](Entity Framework を使用して Razor Pages (CRUD) を追加する) ダイアログを完了します。
- [モデル クラス] ドロップ ダウンで、[Movie (RazorPagesMovie.Models)] を選択します。
-
Data context class 行で、 + (+) 記号を選択します。
-
[データ コンテキストの追加] ダイアログで、クラス名
RazorPagesMovie.Data.RazorPagesMovieContext
が生成されます。 - [データベース プロバイダー] ドロップダウンで、[SQL Server] を選びます。
-
[データ コンテキストの追加] ダイアログで、クラス名
- [追加] を選択します。
appsettings.json
ファイルは、ローカル データベースへの接続に使用される接続文字列を使用して更新されます。
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
作成および更新されたファイル
スキャフォールディングのプロセスでは、次のファイルが作成されます。
- Pages/Movies: 作成、削除、詳細、編集、インデックス。
Data/RazorPagesMovieContext.cs
作成されたファイルについては、次のチュートリアルで説明します。
スキャフォールディング プロセスにより、次の強調されているコードが Program.cs
ファイルに追加されます。
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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapRazorPages();
app.Run();
Program.cs
の変更については、このチュートリアルで後ほど説明します。
EF の移行機能を使用して初期データベース スキーマを作成する
Entity Framework Core の移行機能を使用すると、次のことができます。
- 初期データベース スキーマを作成します。
- データベース スキーマを増分方式で更新して、アプリのデータ モデルとの同期を維持します。 データベース内の既存のデータは保持されます。
このセクションでは、パッケージ マネージャー コンソール (PMC) ウィンドウを使用して、次の作業を行います。
初期移行を追加します。
初期移行でデータベースを更新します。
[ツール] メニューで、[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
PMC で、次のコマンドを入力します。
Add-Migration InitialCreate
Add-Migration
コマンドによって最初のデータベース スキーマを作成するコードが生成されます。 このスキーマは、DbContext
で指定されたモデルに基づきます。InitialCreate
引数は、移行の名前を指定するために使用されます。 任意の名前を使用できますが、規則により、移行を説明する名前が選択されます。
次の警告が表示されますが、これは後の手順で対処します。
エンティティ型 'Movie' の decimal 列 'Price' に型が指定されていません。 これにより、値が既定の有効桁数と小数点以下桁数に収まらない場合、自動的に切り捨てられます。 'HasColumnType()' を使用してすべての値に適合する SQL server 列の型を明示的に指定します。
PMC で、次のコマンドを入力します。
Update-Database
Update-Database
コマンドにより、適用されていない移行でUp
メソッドが実行されます。 ここでは、コマンドにより、Up
ファイルのMigrations/<time-stamp>_InitialCreate.cs
メソッドが実行され、データベースが作成されます。
データ コンテキスト RazorPagesMovieContext
:
- Microsoft.EntityFrameworkCore.DbContext から派生します。
- データ モデルに含まれるエンティティを指定します。
-
EF Core モデルに関する
Movie
の機能 (作成、読み取り、更新、削除など) を調整します。
生成されたファイル内の RazorPagesMovieContext
クラスData/RazorPagesMovieContext.cs
:
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; } = default!;
}
}
上記のコードによって、エンティティ セットの DbSet<Movie> プロパティが作成されます。 Entity Framework の用語では、エンティティ セットは通常はデータベース テーブルに対応します。 エンティティはテーブル内の行に対応します。
DbContextOptions オブジェクトでメソッドが呼び出され、接続文字列の名前がコンテキストに渡されます。 ローカル開発の場合、構成システムによって、appsettings.json
ファイルから接続文字列が読み取られます。
アプリのテスト
アプリを実行し、ブラウザーで URL に
/Movies
を追加します (http://localhost:port/movies
)。次のエラー メッセージが表示される場合:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
移行手順を失敗しました。
[Create New] (新規作成) リンクをテストします。
注
Price
フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使う英語以外のロケール、および英語 (米国) 以外の日付形式で、jQuery 検証をサポートするには、アプリをグローバル化する必要があります。 グローバル化の手順については、この GitHub の記事をご覧ください。[編集] 、 [詳細] 、および [削除] の各リンクをテストします。
次のチュートリアルでは、スキャフォールディングによって作成されるファイルについて説明します。
依存関係挿入に登録されるコンテキストを調べる
ASP.NET Core には、依存関係挿入が組み込まれています。 サービス (EF Core データベース コンテキストなど) は、アプリケーションの起動時に依存関係の挿入に登録されます。 これらのサービスを必要とするコンポーネント (Razor Pages など) は、コンストラクターのパラメーターを介して指定されます。 データベース コンテキスト インスタンスを取得するコンストラクター コードは、この後のチュートリアルで示します。
スキャフォールディング ツールによってデータベース コンテキストが自動的に作成され、依存関係挿入コンテナーに登録されました。 スキャフォールダーにより、次の強調されているコードが Program.cs
ファイルに追加されます。
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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapRazorPages();
app.Run();
完成したサンプルを使用したトラブルシューティング
解決できない問題が発生した場合は、コードを完成したプロジェクトと比較します。 完成したプロジェクトを表示またはダウンロードします (ダウンロード方法)。
次の手順
このチュートリアルでは、データベースの映画を管理するためのクラスが追加されます。 アプリのモデル クラスでは、Entity Framework Core (EF Core) を使用して、データベースを操作します。 EF Core は、データ アクセスを簡略化するオブジェクト リレーショナル マッパー (O/RM) です。 モデル クラスを記述すると、EF Core によってデータベースが作成されます。
モデル クラスは に対する依存関係がないため、Plain-Old CLR EF Corebjects (単純な従来の CLR) の頭文字を取って POCO クラスと呼ばれます。 これらは、データベースに格納されるデータのプロパティを定義します。
データ モデルの追加
ソリューション エクスプローラーで、RazorPagesMovie プロジェクトを右クリックし、>[追加]>[新しいフォルダー] の順に選択します。 フォルダーに「
Models
で行うことができます。Models
フォルダーを右クリックしします。 [追加]>[クラス] の順に選択します。 クラスに Movie と名前を付けます。Movie
クラスに次のプロパティを追加します。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
フィールドは、データベースで主キー用に必要です。プロパティのデータの型を指定する
ReleaseDate
属性。 この属性を使用する場合:- ユーザーは日付フィールドに時刻の情報を入力する必要はありません。
- 日付のみが表示され、時刻の情報は表示されません。
string
の後の疑問符は、そのプロパティが Null 許容であることを示します。 詳細については、「null 許容参照型」を参照してください。
DataAnnotations は、後のチュートリアルで説明されます。
プロジェクトをビルドして、コンパイル エラーがないことを確認します。
ムービー モデルのスキャフォールディング
このセクションでは、ムービー モデルがスキャフォールディングされます。 つまり、スキャフォールディング ツールにより、ムービー モデルの作成、読み取り、更新、削除の (CRUD) 操作用のページが生成されます。
Pages/Movies フォルダーを作成します。
- Pages フォルダーを右クリックし、>> の順に選択します。
- フォルダーに Movies という名前を付けます。
Pages/Movies フォルダーを右クリックし、>> の順に選択します。
[新しいスキャフォールディングの追加] ダイアログで、[Entity Framework を使用する Razor Pages (CRUD)]>[追加] の順に選択します。
[Add Razor Pages using Entity Framework (CRUD)](Entity Framework を使用して Razor Pages (CRUD) を追加する) ダイアログを完了します。
- [モデル クラス] ドロップ ダウンで、[Movie (RazorPagesMovie.Models)] を選択します。
-
Data context class 行で、 + (+) 記号を選択します。
-
[データ コンテキストの追加] ダイアログで、クラス名
RazorPagesMovie.Data.RazorPagesMovieContext
が生成されます。 - [データベース プロバイダー] ドロップダウンで、[SQL Server] を選びます。
-
[データ コンテキストの追加] ダイアログで、クラス名
- [追加] を選択します。
appsettings.json
ファイルは、ローカル データベースへの接続に使用される接続文字列を使用して更新されます。
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
作成および更新されたファイル
スキャフォールディングのプロセスでは、次のファイルが作成されます。
- Pages/Movies: 作成、削除、詳細、編集、インデックス。
Data/RazorPagesMovieContext.cs
作成されたファイルについては、次のチュートリアルで説明します。
スキャフォールディング プロセスにより、次の強調されているコードが Program.cs
ファイルに追加されます。
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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
Program.cs
の変更については、このチュートリアルで後ほど説明します。
EF の移行機能を使用して初期データベース スキーマを作成する
Entity Framework Core の移行機能を使用すると、次のことができます。
- 初期データベース スキーマを作成します。
- データベース スキーマを増分方式で更新して、アプリのデータ モデルとの同期を維持します。 データベース内の既存のデータは保持されます。
このセクションでは、パッケージ マネージャー コンソール (PMC) ウィンドウを使用して、次の作業を行います。
初期移行を追加します。
初期移行でデータベースを更新します。
[ツール] メニューで、[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
PMC で、次のコマンドを入力します。
Add-Migration InitialCreate
Add-Migration
コマンドによって最初のデータベース スキーマを作成するコードが生成されます。 このスキーマは、DbContext
で指定されたモデルに基づきます。InitialCreate
引数は、移行の名前を指定するために使用されます。 任意の名前を使用できますが、規則により、移行を説明する名前が選択されます。
次の警告が表示されますが、これは後の手順で対処します。
エンティティ型 'Movie' の decimal 列 'Price' に型が指定されていません。 これにより、値が既定の有効桁数と小数点以下桁数に収まらない場合、自動的に切り捨てられます。 'HasColumnType()' を使用してすべての値に適合する SQL server 列の型を明示的に指定します。
PMC で、次のコマンドを入力します。
Update-Database
Update-Database
コマンドにより、適用されていない移行でUp
メソッドが実行されます。 ここでは、コマンドにより、Up
ファイルのMigrations/<time-stamp>_InitialCreate.cs
メソッドが実行され、データベースが作成されます。
データ コンテキスト RazorPagesMovieContext
:
- Microsoft.EntityFrameworkCore.DbContext から派生します。
- データ モデルに含まれるエンティティを指定します。
-
EF Core モデルに関する
Movie
の機能 (作成、読み取り、更新、削除など) を調整します。
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; } = default!;
}
}
上記のコードによって、エンティティ セットの DbSet<Movie> プロパティが作成されます。 Entity Framework の用語では、エンティティ セットは通常はデータベース テーブルに対応します。 エンティティはテーブル内の行に対応します。
DbContextOptions オブジェクトでメソッドが呼び出され、接続文字列の名前がコンテキストに渡されます。 ローカル開発の場合、構成システムによって、appsettings.json
ファイルから接続文字列が読み取られます。
アプリのテスト
アプリを実行し、ブラウザーで URL に
/Movies
を追加します (http://localhost:port/movies
)。次のエラー メッセージが表示される場合:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
移行手順を失敗しました。
[Create New] (新規作成) リンクをテストします。
注
Price
フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使う英語以外のロケール、および英語 (米国) 以外の日付形式で、jQuery 検証をサポートするには、アプリをグローバル化する必要があります。 グローバル化の手順については、この GitHub の記事をご覧ください。[編集] 、 [詳細] 、および [削除] の各リンクをテストします。
次のチュートリアルでは、スキャフォールディングによって作成されるファイルについて説明します。
依存関係挿入に登録されるコンテキストを調べる
ASP.NET Core には、依存関係挿入が組み込まれています。 サービス (EF Core データベース コンテキストなど) は、アプリケーションの起動時に依存関係の挿入に登録されます。 これらのサービスを必要とするコンポーネント (Razor Pages など) は、コンストラクターのパラメーターを介して指定されます。 データベース コンテキスト インスタンスを取得するコンストラクター コードは、この後のチュートリアルで示します。
スキャフォールディング ツールによってデータベース コンテキストが自動的に作成され、依存関係挿入コンテナーに登録されました。 スキャフォールダーにより、次の強調されているコードが Program.cs
ファイルに追加されます。
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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
完成したサンプルを使用したトラブルシューティング
解決できない問題が発生した場合は、コードを完成したプロジェクトと比較します。 完成したプロジェクトを表示またはダウンロードします (ダウンロード方法)。
次の手順
このチュートリアルでは、データベースの映画を管理するためのクラスが追加されます。 アプリのモデル クラスでは、Entity Framework Core (EF Core) を使用して、データベースを操作します。 EF Core は、データ アクセスを簡略化するオブジェクト リレーショナル マッパー (O/RM) です。 モデル クラスを記述すると、EF Core によってデータベースが作成されます。
モデル クラスは に対する依存関係がないため、Plain-Old CLR EF Corebjects (単純な従来の CLR) の頭文字を取って POCO クラスと呼ばれます。 これらは、データベースに格納されるデータのプロパティを定義します。
データ モデルの追加
ソリューション エクスプローラーで、RazorPagesMovie プロジェクトを右クリックし、>[追加]>[新しいフォルダー] の順に選択します。 フォルダーに「
Models
で行うことができます。Models
フォルダーを右クリックしします。 [追加]>[クラス] の順に選択します。 クラスに Movie と名前を付けます。Movie
クラスに次のプロパティを追加します。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
フィールドは、データベースで主キー用に必要です。プロパティのデータの型を指定する
ReleaseDate
属性。 この属性を使用する場合:- ユーザーは日付フィールドに時刻の情報を入力する必要はありません。
- 日付のみが表示され、時刻の情報は表示されません。
string
の後の疑問符は、そのプロパティが Null 許容であることを示します。 詳細については、「null 許容参照型」を参照してください。
DataAnnotations は、後のチュートリアルで説明されます。
プロジェクトをビルドして、コンパイル エラーがないことを確認します。
ムービー モデルのスキャフォールディング
このセクションでは、ムービー モデルがスキャフォールディングされます。 つまり、スキャフォールディング ツールにより、ムービー モデルの作成、読み取り、更新、削除の (CRUD) 操作用のページが生成されます。
Pages/Movies フォルダーを作成します。
- Pages フォルダーを右クリックし、>> の順に選択します。
- フォルダーに Movies という名前を付けます。
Pages/Movies フォルダーを右クリックし、>> の順に選択します。
[新しいスキャフォールディングの追加] ダイアログで、[Entity Framework を使用する Razor Pages (CRUD)]>[追加] の順に選択します。
[Add Razor Pages using Entity Framework (CRUD)](Entity Framework を使用して Razor Pages (CRUD) を追加する) ダイアログを完了します。
- [モデル クラス] ドロップ ダウンで、[Movie (RazorPagesMovie.Models)] を選択します。
-
Data context class 行で、 + (+) 記号を選択します。
-
[データ コンテキストの追加] ダイアログで、クラス名
RazorPagesMovie.Data.RazorPagesMovieContext
が生成されます。 - [データベース プロバイダー] ドロップダウンで、[SQL Server] を選びます。
-
[データ コンテキストの追加] ダイアログで、クラス名
- [追加] を選択します。
appsettings.json
ファイルは、ローカル データベースへの接続に使用される接続文字列を使用して更新されます。
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
作成および更新されたファイル
スキャフォールディングのプロセスでは、次のファイルが作成されます。
- Pages/Movies: 作成、削除、詳細、編集、インデックス。
Data/RazorPagesMovieContext.cs
作成されたファイルについては、次のチュートリアルで説明します。
スキャフォールディング プロセスにより、次の強調されているコードが Program.cs
ファイルに追加されます。
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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
Program.cs
の変更については、このチュートリアルで後ほど説明します。
EF の移行機能を使用して初期データベース スキーマを作成する
Entity Framework Core の移行機能を使用すると、次のことができます。
- 初期データベース スキーマを作成します。
- データベース スキーマを増分方式で更新して、アプリのデータ モデルとの同期を維持します。 データベース内の既存のデータは保持されます。
このセクションでは、パッケージ マネージャー コンソール (PMC) ウィンドウを使用して、次の作業を行います。
- 初期移行を追加します。
- 初期移行でデータベースを更新します。
[ツール] メニューで、[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
PMC で、次のコマンドを入力します。
Add-Migration InitialCreate Update-Database
Add-Migration
コマンドによって最初のデータベース スキーマを作成するコードが生成されます。 このスキーマは、DbContext
で指定されたモデルに基づきます。InitialCreate
引数は、移行の名前を指定するために使用されます。 任意の名前を使用できますが、規則により、移行を説明する名前が選択されます。Update-Database
コマンドにより、適用されていない移行でUp
メソッドが実行されます。 ここでは、コマンドにより、Up
ファイルのMigrations/<time-stamp>_InitialCreate.cs
メソッドが実行され、データベースが作成されます。
次の警告が表示されますが、これは後の手順で対処します。
エンティティ型 'Movie' の decimal 列 'Price' に型が指定されていません。 これにより、値が既定の有効桁数と小数点以下桁数に収まらない場合、自動的に切り捨てられます。 'HasColumnType()' を使用してすべての値に適合する SQL server 列の型を明示的に指定します。
データ コンテキスト RazorPagesMovieContext
:
- Microsoft.EntityFrameworkCore.DbContext から派生します。
- データ モデルに含まれるエンティティを指定します。
-
EF Core モデルに関する
Movie
の機能 (作成、読み取り、更新、削除など) を調整します。
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; } = default!;
}
}
上記のコードによって、エンティティ セットの DbSet<Movie> プロパティが作成されます。 Entity Framework の用語では、エンティティ セットは通常はデータベース テーブルに対応します。 エンティティはテーブル内の行に対応します。
DbContextOptions オブジェクトでメソッドが呼び出され、接続文字列の名前がコンテキストに渡されます。 ローカル開発の場合、構成システムによって、appsettings.json
ファイルから接続文字列が読み取られます。
アプリのテスト
アプリを実行し、ブラウザーで URL に
/Movies
を追加します (http://localhost:port/movies
)。次のエラー メッセージが表示される場合:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
移行手順を失敗しました。
[Create New] (新規作成) リンクをテストします。
注
Price
フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使う英語以外のロケール、および英語 (米国) 以外の日付形式で、jQuery 検証をサポートするには、アプリをグローバル化する必要があります。 グローバル化の手順については、この GitHub の記事をご覧ください。[編集] 、 [詳細] 、および [削除] の各リンクをテストします。
次のチュートリアルでは、スキャフォールディングによって作成されるファイルについて説明します。
依存関係挿入に登録されるコンテキストを調べる
ASP.NET Core には、依存関係挿入が組み込まれています。 サービス (EF Core データベース コンテキストなど) は、アプリケーションの起動時に依存関係の挿入に登録されます。 これらのサービスを必要とするコンポーネント (Razor Pages など) は、コンストラクターのパラメーターを介して指定されます。 データベース コンテキスト インスタンスを取得するコンストラクター コードは、この後のチュートリアルで示します。
スキャフォールディング ツールによってデータベース コンテキストが自動的に作成され、依存関係挿入コンテナーに登録されました。 スキャフォールダーにより、次の強調されているコードが Program.cs
ファイルに追加されます。
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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
完成したサンプルを使用したトラブルシューティング
解決できない問題が発生した場合は、コードを完成したプロジェクトと比較します。 完成したプロジェクトを表示またはダウンロードします (ダウンロード方法)。
次の手順
このチュートリアルでは、データベースの映画を管理するためのクラスが追加されます。 アプリのモデル クラスでは、Entity Framework Core (EF Core) を使用して、データベースを操作します。 EF Core は、データ アクセスを簡略化するオブジェクト リレーショナル マッパー (O/RM) です。 モデル クラスを記述すると、EF Core によってデータベースが作成されます。
モデル クラスは に対する依存関係がないため、Plain-Old CLR EF Corebjects (単純な従来の CLR) の頭文字を取って POCO クラスと呼ばれます。 これらは、データベースに格納されるデータのプロパティを定義します。
データ モデルの追加
ソリューション エクスプローラーで、RazorPagesMovie プロジェクトを右クリックし、>[追加]>[新しいフォルダー] の順に選択します。 フォルダーに「
Models
で行うことができます。Models
フォルダーを右クリックしします。 [追加]>[クラス] の順に選択します。 クラスに Movie と名前を付けます。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
クラスには次が含まれます。
DataAnnotations は、後のチュートリアルで説明されます。
プロジェクトをビルドして、コンパイル エラーがないことを確認します。
ムービー モデルのスキャフォールディング
このセクションでは、ムービー モデルがスキャフォールディングされます。 つまり、スキャフォールディング ツールにより、ムービー モデルの作成、読み取り、更新、削除の (CRUD) 操作用のページが生成されます。
スキャフォールディング ツールに必要な NuGet パッケージ
Microsoft.EntityFrameworkCore.Design
を追加します。-
[ツール] メニューから、[NuGet パッケージ マネージャー]>[ソリューションの NuGet パッケージの管理] を選択します。
- [参照] タブを選択します。
- 「
Microsoft.EntityFrameworkCore.Design
」と入力し、一覧から選択します。 - [プロジェクト] をオンにしてから、 [インストール] を選択します
-
[ライセンスへの同意] ダイアログで [同意する] を選択します。
-
[ツール] メニューから、[NuGet パッケージ マネージャー]>[ソリューションの NuGet パッケージの管理] を選択します。
Pages/Movies フォルダーを作成します。
- Pages フォルダーを右クリックし、>> の順に選択します。
- フォルダーに Movies という名前を付けます。
Pages/Movies フォルダーを右クリックし、>> の順に選択します。
[新しいスキャフォールディングの追加] ダイアログで、[Entity Framework を使用する Razor Pages (CRUD)]>[追加] の順に選択します。
[Add Razor Pages using Entity Framework (CRUD)](Entity Framework を使用して Razor Pages (CRUD) を追加する) ダイアログを完了します。
- [モデル クラス] ドロップ ダウンで、[Movie (RazorPagesMovie.Models)] を選択します。
-
Data context class 行で、 + (+) 記号を選択します。
-
[データ コンテキストの追加] ダイアログで、クラス名
RazorPagesMovie.Data.RazorPagesMovieContext
が生成されます。
-
[データ コンテキストの追加] ダイアログで、クラス名
- [追加] を選択します。
Microsoft.EntityFrameworkCore.SqlServer
パッケージをインストールする必要があることを示すエラー メッセージが表示された場合は、[追加]>[新規スキャフォールディング アイテム] で始まる手順を繰り返します。
appsettings.json
ファイルは、ローカル データベースへの接続に使用される接続文字列を使用して更新されます。
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
作成および更新されたファイル
スキャフォールディングのプロセスでは、次のファイルが作成されます。
- Pages/Movies: 作成、削除、詳細、編集、インデックス。
Data/RazorPagesMovieContext.cs
作成されたファイルについては、次のチュートリアルで説明します。
スキャフォールディング プロセスにより、次の強調されているコードが Program.cs
ファイルに追加されます。
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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
Program.cs
の変更については、このチュートリアルで後ほど説明します。
EF の移行機能を使用して初期データベース スキーマを作成する
Entity Framework Core の移行機能を使用すると、次のことができます。
- 初期データベース スキーマを作成します。
- データベース スキーマを増分方式で更新して、アプリのデータ モデルとの同期を維持します。 データベース内の既存のデータは保持されます。
このセクションでは、パッケージ マネージャー コンソール (PMC) ウィンドウを使用して、次の作業を行います。
- 初期移行を追加します。
- 初期移行でデータベースを更新します。
[ツール] メニューで、[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
PMC で、次のコマンドを入力します。
Add-Migration InitialCreate Update-Database
前のコマンドを使うと、Entity Framework Core ツールをインストールし、migrations
コマンドを実行して、初期データベース スキーマを作成するコードを生成できます。
次の警告が表示されますが、これは後の手順で対処します。
エンティティ型 'Movie' の decimal 列 'Price' に型が指定されていません。 これにより、値が既定の有効桁数と小数点以下桁数に収まらない場合、自動的に切り捨てられます。 'HasColumnType()' を使用してすべての値に適合する SQL server 列の型を明示的に指定します。
migrations
コマンドによって最初のデータベース スキーマを作成するコードが生成されます。 このスキーマは、DbContext
で指定されたモデルに基づきます。
InitialCreate
引数は移行の命名に使用されます。 任意の名前を使用できますが、規則により、移行を説明する名前が選択されます。
update
コマンドにより、適用されていない移行で Up
メソッドが実行されます。 ここでは、update
により、Up
ファイルの Migrations/<time-stamp>_InitialCreate.cs
メソッドが実行され、データベースが作成されます。
依存関係挿入に登録されるコンテキストを調べる
ASP.NET Core には、依存関係挿入が組み込まれています。 サービス (EF Core データベース コンテキストなど) は、アプリケーションの起動時に依存関係の挿入に登録されます。 これらのサービスを必要とするコンポーネント (Razor Pages など) は、コンストラクターのパラメーターを介して指定されます。 データベース コンテキスト インスタンスを取得するコンストラクター コードは、この後のチュートリアルで示します。
スキャフォールディング ツールによってデータベース コンテキストが自動的に作成され、依存関係挿入コンテナーに登録されました。 スキャフォールダーにより、次の強調されているコードが Program.cs
ファイルに追加されます。
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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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
:
- Microsoft.EntityFrameworkCore.DbContext から派生します。
- データ モデルに含まれるエンティティを指定します。
-
EF Core モデルに関する
Movie
の機能 (作成、読み取り、更新、削除など) を調整します。
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
ファイルから接続文字列が読み取られます。
アプリのテスト
アプリを実行し、ブラウザーで URL に
/Movies
を追加します (http://localhost:port/movies
)。次のエラー メッセージが表示される場合:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
移行手順を失敗しました。
[Create New] (新規作成) リンクをテストします。
注
Price
フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使う英語以外のロケール、および英語 (米国) 以外の日付形式で、jQuery 検証をサポートするには、アプリをグローバル化する必要があります。 グローバル化の手順については、この GitHub の記事をご覧ください。[編集] 、 [詳細] 、および [削除] の各リンクをテストします。
次のチュートリアルでは、スキャフォールディングによって作成されるファイルについて説明します。
完成したサンプルを使用したトラブルシューティング
解決できない問題が発生した場合は、コードを完成したプロジェクトと比較します。 完成したプロジェクトを表示またはダウンロードします (ダウンロード方法)。
次の手順
このセクションでは、データベースで映画を管理するクラスが追加されます。 アプリのモデル クラスでは、Entity Framework Core (EF Core) を使用して、データベースを操作します。 EF Core は、データ アクセスを簡略化するオブジェクト リレーショナル マッパー (O/RM) です。 モデル クラスを記述すると、EF Core によってデータベースが作成されます。
モデル クラスは に対する依存関係がないため、Plain-Old CLR EF Corebjects (単純な従来の CLR) の頭文字を取って POCO クラスと呼ばれます。 これらは、データベースに格納されるデータのプロパティを定義します。
サンプル コードを表示またはダウンロードします (ダウンロード方法)。
データ モデルの追加
ソリューション エクスプローラーで、RazorPagesMovie プロジェクトを右クリックし、>[追加]>[新しいフォルダー] の順に選択します。 フォルダーに「
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
クラスには次が含まれます。
ID
フィールドは、データベースで主キー用に必要です。[DataType(DataType.Date)]
: [DataType] 属性では、データの種類 (Date
) を指定します。 この属性を使用する場合:- ユーザーは日付フィールドに時刻の情報を入力する必要はありません。
- 日付のみが表示され、時刻の情報は表示されません。
DataAnnotations は、後のチュートリアルで説明されます。
プロジェクトをビルドして、コンパイル エラーがないことを確認します。
ムービー モデルのスキャフォールディング
このセクションでは、ムービー モデルがスキャフォールディングされます。 つまり、スキャフォールディング ツールにより、ムービー モデルの作成、読み取り、更新、削除の (CRUD) 操作用のページが生成されます。
Pages/Movies フォルダーを作成します。
- Pages フォルダーを右クリックし、>> の順に選択します。
- フォルダーに Movies という名前を付けます。
Pages/Movies フォルダーを右クリックし、>> の順に選択します。
[スキャフォールディングを追加] ダイアログで、[Entity Framework を使用する Razor Pages (CRUD)]>[追加] の順に選択します。
[Add Razor Pages using Entity Framework (CRUD)](Entity Framework を使用して Razor Pages (CRUD) を追加する) ダイアログを完了します。
- [モデル クラス] ドロップ ダウンで、[Movie (RazorPagesMovie.Models)] を選択します。
-
Data context class 行で、 + (+) 記号を選択します。
-
[データ コンテキストの追加] ダイアログで、クラス名
RazorPagesMovie.Data.RazorPagesMovieContext
が生成されます。
-
[データ コンテキストの追加] ダイアログで、クラス名
- [追加] を選択します。
appsettings.json
ファイルは、ローカル データベースへの接続に使用される接続文字列を使用して更新されます。
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
作成および更新されたファイル
スキャフォールディングのプロセスでは、次のファイルが作成されます。
- Pages/Movies: 作成、削除、詳細、編集、インデックス。
Data/RazorPagesMovieContext.cs
更新されたファイル
Startup.cs
作成および更新されたファイルについては、次のセクションで説明します。
EF の移行機能を使用して初期データベース スキーマを作成する
Entity Framework Core の移行機能を使用すると、次のことができます。
- 初期データベース スキーマを作成します。
- データベース スキーマを増分方式で更新して、アプリケーションのデータ モデルとの同期を維持する。 データベース内の既存のデータは保持されます。
このセクションでは、パッケージ マネージャー コンソール (PMC) ウィンドウを使用して、次の作業を行います。
- 初期移行を追加します。
- 初期移行でデータベースを更新します。
[ツール] メニューで、[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
PMC で、次のコマンドを入力します。
Add-Migration InitialCreate Update-Database
SQL Server では、上記のコマンドで次の警告が生成されます。"エンティティ型 'Movie' の decimal 列 'Price' に型が指定されていません。 これにより、値が既定の有効桁数と小数点以下桁数に収まらない場合、自動的に切り捨てられます。 'HasColumnType()' を使用してすべての値に適合する SQL server 列の型を明示的に指定します。"
この警告は、後の手順で解決されるため、無視してください。
migrations
コマンドによって最初のデータベース スキーマを作成するコードが生成されます。 このスキーマは、DbContext
で指定されたモデルに基づきます。
InitialCreate
引数は移行の命名に使用されます。 任意の名前を使用できますが、規則により、移行を説明する名前が選択されます。
update
コマンドにより、適用されていない移行で Up
メソッドが実行されます。 ここでは、update
により、Up
ファイルの Migrations/<time-stamp>_InitialCreate.cs
メソッドが実行され、データベースが作成されます。
依存関係挿入に登録されるコンテキストを調べる
ASP.NET Core には、依存関係挿入が組み込まれています。 サービス (EF Core データベース コンテキストなど) は、アプリケーションの起動時に依存関係の挿入に登録されます。 これらのサービスを必要とするコンポーネント (Razor Pages など) は、コンストラクターのパラメーターを介して指定されます。 データベース コンテキスト インスタンスを取得するコンストラクター コードは、この後のチュートリアルで示します。
スキャフォールディング ツールによってデータベース コンテキストが自動的に作成され、依存関係挿入コンテナーに登録されました。
Startup.ConfigureServices
メソッドを調べます。 強調表示された行は、スキャフォールダーによって追加されました。
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
ファイルから接続文字列が読み取られます。
アプリのテスト
アプリを実行し、ブラウザーで URL に
/Movies
を追加します (http://localhost:port/movies
)。次のエラー メッセージが表示される場合:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
移行手順を失敗しました。
[作成] リンクをテストします。
注
Price
フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使う英語以外のロケール、および英語 (米国) 以外の日付形式で、jQuery 検証をサポートするには、アプリをグローバル化する必要があります。 グローバル化の手順については、この GitHub の記事をご覧ください。[編集] 、 [詳細] 、および [削除] の各リンクをテストします。
Entity Framework Core の SQL ログ
一般的に、ログの構成は Logging
ファイルの appsettings.{Environment}.json
セクションで指定されます。 SQL ステートメントをログに記録するには、"Microsoft.EntityFrameworkCore.Database.Command": "Information"
ファイルに appsettings.Development.json
を追加します。
{
"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 イシューを参照してください。
次のチュートリアルでは、スキャフォールディングによって作成されるファイルについて説明します。
次の手順
このセクションでは、映画を管理するクラスが追加されます。 アプリのモデル クラスでは、Entity Framework Core (EF Core) を使用して、データベースを操作します。 EF Core は、データ アクセスを簡略化するオブジェクト リレーショナル マッパー (O/RM) です。
このモデル クラスは、EF Core に対する依存関係がないために、POCO クラス ("plain-old CLR objects"、つまり単純な従来の CLR オブジェクト) と呼ばれます。 これらは、データベースに格納されるデータのプロパティを定義します。
サンプル コードを表示またはダウンロードします (ダウンロード方法)。
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
データ モデルの追加
RazorPagesMovie プロジェクトを右クリックし、>[追加]>[新しいフォルダー] の順に選択します。 フォルダーに「 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
クラスには次が含まれます。
ID
フィールドは、データベースで主キー用に必要です。[DataType(DataType.Date)]
: DataType 属性では、データの型 (Date
) を指定します。 この属性を使用する場合:- ユーザーは日付フィールドに時刻の情報を入力する必要はありません。
- 日付のみが表示され、時刻の情報は表示されません。
DataAnnotations は、後のチュートリアルで説明されます。
DataAnnotations は、後のチュートリアルで説明されます。
プロジェクトをビルドして、コンパイル エラーがないことを確認します。
ムービー モデルのスキャフォールディング
このセクションでは、ムービー モデルがスキャフォールディングされます。 つまり、スキャフォールディング ツールにより、ムービー モデルの作成、読み取り、更新、削除の (CRUD) 操作用のページが生成されます。
Pages/Movies フォルダーを作成します。
- Pages フォルダーを右クリックし、>> の順に選択します。
- フォルダーに Movies という名前を付けます。
Pages/Movies フォルダーを右クリックし、>> の順に選択します。
[スキャフォールディングを追加] ダイアログで、[Entity Framework を使用する Razor Pages (CRUD)]>[追加] の順に選択します。
[Add Razor Pages using Entity Framework (CRUD)](Entity Framework を使用して Razor Pages (CRUD) を追加する) ダイアログを完了します。
- [モデル クラス] ドロップ ダウンで、[Movie (RazorPagesMovie.Models)] を選択します。
-
データ コンテキスト クラス行で、+ (プラス) 記号を選択し、生成された名前 RazorPagesMovie.
Models
.RazorPagesMovieContext を RazorPagesMovie.Data.RazorPagesMovieContext に変更します。 この変更は必須ではありません。 これにより、正しい名前空間を使用してデータベース コンテキスト クラスが作成されます。 - [追加] を選択します。
appsettings.json
ファイルは、ローカル データベースへの接続に使用される接続文字列を使用して更新されます。
作成されたファイル
スキャフォールディングのプロセスが作成され、次のファイルが更新されます。
- Pages/Movies: 作成、削除、詳細、編集、インデックス。
Data/RazorPagesMovieContext.cs
更新済み
Startup.cs
作成および更新されたファイルについては、次のセクションで説明します。
最初の移行
このセクションでは、パッケージ マネージャー コンソール (PMC) を使用して、次の作業を行います。
- 初期移行を追加します。
- 初期移行でデータベースを更新します。
[ツール] メニューで、[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
PMC で、次のコマンドを入力します。
Add-Migration InitialCreate
Update-Database
上記のコマンドで次の警告が生成されます。"エンティティ型 'Movie' の decimal 列 'Price' に型が指定されていません。 これにより、値が既定の有効桁数と小数点以下桁数に収まらない場合、自動的に切り捨てられます。 'HasColumnType()' を使用してすべての値に適合する SQL server 列の型を明示的に指定します。"
この警告は、後の手順で解決されるため、無視してください。
移行コマンドによって、最初のデータベース スキーマを作成するコードが生成されます。 このスキーマは、DbContext
で指定されたモデルに基づきます。
InitialCreate
引数は移行の命名に使用されます。 任意の名前を使用できますが、規則により、移行を説明する名前が選択されます。
update
コマンドにより、適用されていない移行で Up
メソッドが実行されます。 ここでは、update
により、Up
ファイルの Migrations/<time-stamp>_InitialCreate.cs
メソッドが実行され、データベースが作成されます。
依存関係挿入に登録されるコンテキストを調べる
ASP.NET Core には、依存関係挿入が組み込まれています。 サービス (EF Core データベース コンテキストなど) は、アプリケーションの起動時に依存関係の挿入に登録されます。 これらのサービスを必要とするコンポーネント (Razor Pages など) は、コンストラクターのパラメーターを介して指定されます。 データベース コンテキスト インスタンスを取得するコンストラクター コードは、この後のチュートリアルで示します。
スキャフォールディング ツールによってデータベース コンテキストが自動的に作成され、依存関係挿入コンテナーに登録されました。
Startup.ConfigureServices
メソッドを調べます。 強調表示された行は、スキャフォールダーによって追加されました。
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
ファイルから接続文字列が読み取られます。
アプリのテスト
- アプリを実行し、ブラウザーで URL に
/Movies
を追加します (http://localhost:port/movies
)。
エラーが発生した場合は、次のようにします。
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
Login failed for user 'User-name'.
移行手順を失敗しました。
[作成] リンクをテストします。
注
Price
フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使う英語以外のロケール、および英語 (米国) 以外の日付形式で、jQuery 検証をサポートするには、アプリをグローバル化する必要があります。 グローバル化の手順については、この GitHub の記事をご覧ください。[編集] 、 [詳細] 、および [削除] の各リンクをテストします。
次のチュートリアルでは、スキャフォールディングによって作成されるファイルについて説明します。
次の手順
ASP.NET Core