Note
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
Warning
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、 .NET および .NET Core サポート ポリシーを参照してください。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
Important
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 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] を選びます。
-
[データ コンテキストの追加] ダイアログで、クラス名
- Select Add.
appsettings.json
ファイルは、ローカル データベースへの接続に使用される接続文字列を使用して更新されます。
Warning
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
作成および更新されたファイル
スキャフォールディングのプロセスでは、次のファイルが作成されます。
- 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] (新規作成) リンクをテストします。
Note
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();
完成したサンプルを使用したトラブルシューティング
解決できない問題が発生した場合は、コードを完成したプロジェクトと比較します。 完成したプロジェクトを表示またはダウンロードします (ダウンロード方法)。
Next steps
このチュートリアルでは、データベースの映画を管理するためのクラスが追加されます。 アプリのモデル クラスでは、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] を選びます。
-
[データ コンテキストの追加] ダイアログで、クラス名
- Select Add.
appsettings.json
ファイルは、ローカル データベースへの接続に使用される接続文字列を使用して更新されます。
Warning
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
作成および更新されたファイル
スキャフォールディングのプロセスでは、次のファイルが作成されます。
- 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] (新規作成) リンクをテストします。
Note
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();
完成したサンプルを使用したトラブルシューティング
解決できない問題が発生した場合は、コードを完成したプロジェクトと比較します。 完成したプロジェクトを表示またはダウンロードします (ダウンロード方法)。
Next steps
このチュートリアルでは、データベースの映画を管理するためのクラスが追加されます。 アプリのモデル クラスでは、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] を選びます。
-
[データ コンテキストの追加] ダイアログで、クラス名
- Select Add.
appsettings.json
ファイルは、ローカル データベースへの接続に使用される接続文字列を使用して更新されます。
Warning
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
作成および更新されたファイル
スキャフォールディングのプロセスでは、次のファイルが作成されます。
- 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] (新規作成) リンクをテストします。
Note
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();
完成したサンプルを使用したトラブルシューティング
解決できない問題が発生した場合は、コードを完成したプロジェクトと比較します。 完成したプロジェクトを表示またはダウンロードします (ダウンロード方法)。
Next steps
このチュートリアルでは、データベースの映画を管理するためのクラスが追加されます。 アプリのモデル クラスでは、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
が生成されます。
-
[データ コンテキストの追加] ダイアログで、クラス名
- Select Add.
Microsoft.EntityFrameworkCore.SqlServer
パッケージをインストールする必要があることを示すエラー メッセージが表示された場合は、[追加]>[新規スキャフォールディング アイテム] で始まる手順を繰り返します。
appsettings.json
ファイルは、ローカル データベースへの接続に使用される接続文字列を使用して更新されます。
Warning
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
作成および更新されたファイル
スキャフォールディングのプロセスでは、次のファイルが作成されます。
- 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] (新規作成) リンクをテストします。
Note
Price
フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使う英語以外のロケール、および英語 (米国) 以外の日付形式で、jQuery 検証をサポートするには、アプリをグローバル化する必要があります。 グローバル化の手順については、この GitHub の記事をご覧ください。[編集] 、 [詳細] 、および [削除] の各リンクをテストします。
次のチュートリアルでは、スキャフォールディングによって作成されるファイルについて説明します。
完成したサンプルを使用したトラブルシューティング
解決できない問題が発生した場合は、コードを完成したプロジェクトと比較します。 完成したプロジェクトを表示またはダウンロードします (ダウンロード方法)。
Next steps
このセクションでは、データベースで映画を管理するクラスが追加されます。 アプリのモデル クラスでは、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
が生成されます。
-
[データ コンテキストの追加] ダイアログで、クラス名
- Select Add.
appsettings.json
ファイルは、ローカル データベースへの接続に使用される接続文字列を使用して更新されます。
Warning
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
作成および更新されたファイル
スキャフォールディングのプロセスでは、次のファイルが作成されます。
- Pages/Movies: 作成、削除、詳細、編集、インデックス。
Data/RazorPagesMovieContext.cs
Updated files
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'.
移行手順を失敗しました。
[作成] リンクをテストします。
Note
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 と ASP.NET Core のログ記録と この GitHub の問題を参照してください。
次のチュートリアルでは、スキャフォールディングによって作成されるファイルについて説明します。
Next steps
このセクションでは、映画を管理するクラスが追加されます。 アプリのモデル クラスでは、Entity Framework Core (EF Core) を使用して、データベースを操作します。 EF Core は、データ アクセスを簡略化するオブジェクト リレーショナル マッパー (O/RM) です。
このモデル クラスは、EF Core に対する依存関係がないために、POCO クラス ("plain-old CLR objects"、つまり単純な従来の CLR オブジェクト) と呼ばれます。 これらは、データベースに格納されるデータのプロパティを定義します。
サンプル コードを表示またはダウンロードします (ダウンロード方法)。
Warning
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
データ モデルの追加
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 に変更します。 この変更は必須ではありません。 これにより、正しい名前空間を使用してデータベース コンテキスト クラスが作成されます。 - Select Add.
appsettings.json
ファイルは、ローカル データベースへの接続に使用される接続文字列を使用して更新されます。
Files created
スキャフォールディングのプロセスが作成され、次のファイルが更新されます。
- Pages/Movies: 作成、削除、詳細、編集、インデックス。
Data/RazorPagesMovieContext.cs
Updated
Startup.cs
作成および更新されたファイルについては、次のセクションで説明します。
Initial migration
このセクションでは、パッケージ マネージャー コンソール (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'.
移行手順を失敗しました。
[作成] リンクをテストします。
Note
Price
フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使う英語以外のロケール、および英語 (米国) 以外の日付形式で、jQuery 検証をサポートするには、アプリをグローバル化する必要があります。 グローバル化の手順については、この GitHub の記事をご覧ください。[編集] 、 [詳細] 、および [削除] の各リンクをテストします。
次のチュートリアルでは、スキャフォールディングによって作成されるファイルについて説明します。
Next steps
ASP.NET Core