注
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 10 バージョンを参照してください。
警告
このバージョンの ASP.NET Coreはサポートされなくなりました。 詳細については、.NETおよびコア サポート ポリシー.NETを参照してください。 現在のリリースについては、この記事の .NET 10 バージョンを参照してください。
イントロダクション
チュートリアル シリーズのこの部分では、ASP.NET Core MVC アプリケーションでの SQL データベースの操作に重点を置いています。
学習内容は次のとおりです。
- ASP.NET Core MVC アプリのEntity Framework Core データベース コンテキストを登録して構成します。
- ローカル開発用のデータベース接続文字列を操作します。
- SQL Server Express LocalDB を開発に使用し、SQL Server オブジェクト エクスプローラーを使用してデータベースとデータを調べます。
- 初期サンプル データを使用してデータベースをシード処理します。
前提条件
このチュートリアルでは、前の手順で設定したデータベース (Part 4) を使用して、ASP.NET Core MVC アプリにモデルを追加します。
データベース コンテキストの操作
MvcMovieContext オブジェクトは、データベースへの接続と、データベース レコードへの Movie オブジェクトのマッピングのタスクを処理します。 データベース コンテキストは、 ファイルにあるProgram.csコンテナーに登録されます。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
ASP.NET Core Configuration システムは、ConnectionString キーを読み取ります。 ローカル開発では、appsettings.json ファイルから接続文字列を取得します。
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
SQL Server Express LocalDB(ローカルデータベース開発用ツール)
LocalDB:
- SQL Server Express データベース エンジンの軽量バージョンで、既定で Visual Studio と共にインストールされます。
- 接続文字列を使用してオンデマンドで開始します。
- プログラム開発を対象としています。 ユーザー モードで実行されるため、複雑な構成はありません。
- 既定では、C:/Users/{user} ディレクトリに .mdf ファイルが作成されます。
データベースを確認する
View メニューから、SQL Server オブジェクト エクスプローラー (SSOX) を開きます。
Movie テーブル (dbo.Movie) を右クリックして、> を選択します。
ID の横のキー アイコンに注意してください。 既定では、EF は ID という名前のプロパティを主キーにします。
Movie テーブルを右クリックして、> データを表示 を選択します。
>
データベースのシード
SeedData フォルダーに という名前の新しいクラスを作成します。 生成されたコードを次のコードに置き換えます。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
データベースにムービーがある場合、シード初期化子が返され、ムービーは追加されません。
if (context.Movie.Any())
{
return; // DB has been seeded.
}
シード初期化子の追加
Program.cs の内容を以下のコードに置き換えます。 新しいコードが強調表示されます。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/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.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}")
.WithStaticAssets();
app.Run();
アプリをテストします。 アプリに初期化を強制し、Program.cs ファイルのコードを呼び出して、シード メソッドが実行されるようにします。 初期化を強制するには、開Visual Studioコマンド プロンプト ウィンドウを閉じ、Ctrl キーを押しながら F5 キーを押して再起動します。
アプリにシードされたデータが表示されます。
また、 Movie テーブルの更新では、同じデータが表示されます。
注
小数フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使い、英語 (米国) 以外の日付形式を使う英語以外のロケールの jQuery 検証をサポートするには、アプリをグローバル化する手順を行う必要があります。 10 進数のコンマを追加する手順については、このGitHubコメント 4076 を参照してください。
イントロダクション
チュートリアル シリーズのこの部分では、ASP.NET Core MVC アプリケーションでの SQL データベースの操作に重点を置いています。
学習内容は次のとおりです。
- ASP.NET Core MVC アプリのEntity Framework Core データベース コンテキストを登録して構成します。
- ローカル開発用のデータベース接続文字列を操作します。
- SQL Server Express LocalDB を開発に使用し、SQL Server オブジェクト エクスプローラーを使用してデータベースとデータを調べます。
- 初期サンプル データを使用してデータベースをシード処理します。
前提条件
このチュートリアルでは、前の手順で設定したデータベース (Part 4) を使用して、ASP.NET Core MVC アプリにモデルを追加します。
データベース コンテキストの操作
MvcMovieContext オブジェクトは、データベースへの接続と、データベース レコードへの Movie オブジェクトのマッピングのタスクを処理します。 データベース コンテキストは、 ファイルにあるProgram.csコンテナーに登録されます。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
ASP.NET Core Configuration システムは、ConnectionString キーを読み取ります。 ローカル開発では、appsettings.json ファイルから接続文字列を取得します。
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
SQL Server Express LocalDB(ローカルデータベース開発用ツール)
LocalDB:
- SQL Server Express データベース エンジンの軽量バージョンで、既定で Visual Studio と共にインストールされます。
- 接続文字列を使用してオンデマンドで開始します。
- プログラム開発を対象としています。 ユーザー モードで実行されるため、複雑な構成はありません。
- 既定では、C:/Users/{user} ディレクトリに .mdf ファイルが作成されます。
データベースを確認する
View メニューから、SQL Server オブジェクト エクスプローラー (SSOX) を開きます。
Movie テーブル (dbo.Movie) を右クリックして、> を選択します。
>
ID の横のキー アイコンに注意してください。 既定では、EF は ID という名前のプロパティを主キーにします。
Movie テーブルを右クリックして、> データを表示 を選択します。
>
データベースのシード
SeedData フォルダーに という名前の新しいクラスを作成します。 生成されたコードを次のコードに置き換えます。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
データベースにムービーがある場合、シード初期化子が返され、ムービーは追加されません。
if (context.Movie.Any())
{
return; // DB has been seeded.
}
シード初期化子の追加
Program.cs の内容を以下のコードに置き換えます。 新しいコードが強調表示されます。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/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.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
データベース内のすべてのレコードを削除します。 これはブラウザーの削除リンクで行うか、SSOX から行うことができます。
アプリをテストします。 アプリに初期化を強制し、Program.cs ファイルのコードを呼び出して、シード メソッドが実行されるようにします。 初期化を強制するには、開Visual Studioコマンド プロンプト ウィンドウを閉じ、Ctrl キーを押しながら F5 キーを押して再起動します。
アプリにシードされたデータが表示されます。
注
小数フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使い、英語 (米国) 以外の日付形式を使う英語以外のロケールの jQuery 検証をサポートするには、アプリをグローバル化する手順を行う必要があります。 10 進数のコンマを追加する手順については、このGitHubコメント 4076 を参照してください。
イントロダクション
チュートリアル シリーズのこの部分では、ASP.NET Core MVC アプリケーションでの SQL データベースの操作に重点を置いています。
学習内容は次のとおりです。
- ASP.NET Core MVC アプリのEntity Framework Core データベース コンテキストを登録して構成します。
- ローカル開発用のデータベース接続文字列を操作します。
- SQL Server Express LocalDB を開発に使用し、SQL Server オブジェクト エクスプローラーを使用してデータベースとデータを調べます。
- 初期サンプル データを使用してデータベースをシード処理します。
前提条件
このチュートリアルでは、前の手順で設定したデータベース (Part 4) を使用して、ASP.NET Core MVC アプリにモデルを追加します。
データベース コンテキストの操作
MvcMovieContext オブジェクトは、データベースへの接続と、データベース レコードへの Movie オブジェクトのマッピングのタスクを処理します。 データベース コンテキストは、 ファイルにあるProgram.csコンテナーに登録されます。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Core Configuration システムは、ConnectionString キーを読み取ります。 ローカル開発では、appsettings.json ファイルから接続文字列を取得します。
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
SQL Server Express LocalDB(ローカルデータベース開発用ツール)
LocalDB:
- SQL Server Express データベース エンジンの軽量バージョンで、既定で Visual Studio と共にインストールされます。
- 接続文字列を使用してオンデマンドで開始します。
- プログラム開発を対象としています。 ユーザー モードで実行されるため、複雑な構成はありません。
- 既定では、C:/Users/{user} ディレクトリに .mdf ファイルが作成されます。
データベースを確認する
View メニューから、SQL Server オブジェクト エクスプローラー (SSOX) を開きます。
Movie テーブル (dbo.Movie) を右クリックして、> を選択します。
>
ID の横のキー アイコンに注意してください。 既定では、EF は ID という名前のプロパティを主キーにします。
Movie テーブルを右クリックして、> データを表示 を選択します。
>
データベースのシード
SeedData フォルダーに という名前の新しいクラスを作成します。 生成されたコードを次のコードに置き換えます。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
データベースにムービーがある場合、シード初期化子が返され、ムービーは追加されません。
if (context.Movie.Any())
{
return; // DB has been seeded.
}
シード初期化子の追加
Program.cs の内容を以下のコードに置き換えます。 新しいコードが強調表示されます。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/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.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
データベース内のすべてのレコードを削除します。 これはブラウザーの削除リンクで行うか、SSOX から行うことができます。
アプリをテストします。 アプリに初期化を強制し、Program.cs ファイルのコードを呼び出して、シード メソッドが実行されるようにします。 初期化を強制するには、開Visual Studioコマンド プロンプト ウィンドウを閉じ、Ctrl キーを押しながら F5 キーを押して再起動します。
アプリにシードされたデータが表示されます。
注
小数フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使い、英語 (米国) 以外の日付形式を使う英語以外のロケールの jQuery 検証をサポートするには、アプリをグローバル化する手順を行う必要があります。 10 進数のコンマを追加する手順については、このGitHubコメント 4076 を参照してください。
イントロダクション
チュートリアル シリーズのこの部分では、ASP.NET Core MVC アプリケーションでの SQL データベースの操作に重点を置いています。
学習内容は次のとおりです。
- ASP.NET Core MVC アプリのEntity Framework Core データベース コンテキストを登録して構成します。
- ローカル開発用のデータベース接続文字列を操作します。
- SQL Server Express LocalDB を開発に使用し、SQL Server オブジェクト エクスプローラーを使用してデータベースとデータを調べます。
- 初期サンプル データを使用してデータベースをシード処理します。
前提条件
このチュートリアルでは、前の手順で設定したデータベース (Part 4) を使用して、ASP.NET Core MVC アプリにモデルを追加します。
データベース コンテキストの操作
MvcMovieContext オブジェクトは、データベースへの接続と、データベース レコードへの Movie オブジェクトのマッピングのタスクを処理します。 データベース コンテキストは、 ファイルにあるProgram.csコンテナーに登録されます。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Core Configuration システムは、ConnectionString キーを読み取ります。 ローカル開発では、appsettings.json ファイルから接続文字列を取得します。
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
SQL Server Express LocalDB(ローカルデータベース開発用ツール)
LocalDB:
- SQL Server Express データベース エンジンの軽量バージョンで、既定で Visual Studio と共にインストールされます。
- 接続文字列を使用してオンデマンドで開始します。
- プログラム開発を対象としています。 ユーザー モードで実行されるため、複雑な構成はありません。
- 既定では、C:/Users/{user} ディレクトリに .mdf ファイルが作成されます。
データベースを確認する
View メニューから、SQL Server オブジェクト エクスプローラー (SSOX) を開きます。
Movie テーブル (dbo.Movie) を右クリックして、> を選択します。
>
ID の横のキー アイコンに注意してください。 既定では、EF は ID という名前のプロパティを主キーにします。
Movie テーブルを右クリックして、> データを表示 を選択します。
>
データベースのシード
SeedData フォルダーに という名前の新しいクラスを作成します。 生成されたコードを次のコードに置き換えます。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
データベースにムービーがある場合、シード初期化子が返され、ムービーは追加されません。
if (context.Movie.Any())
{
return; // DB has been seeded.
}
<a name=snippet_"si">
シード初期化子の追加
Program.cs の内容を以下のコードに置き換えます。 新しいコードが強調表示されます。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/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.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
データベース内のすべてのレコードを削除します。 これはブラウザーの削除リンクで行うか、SSOX から行うことができます。
アプリをテストします。 アプリに初期化を強制し、Program.cs ファイルのコードを呼び出して、シード メソッドが実行されるようにします。 初期化を強制するには、開Visual Studioコマンド プロンプト ウィンドウを閉じ、Ctrl キーを押しながら F5 キーを押して再起動します。
アプリにシードされたデータが表示されます。
注
小数フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使い、英語 (米国) 以外の日付形式を使う英語以外のロケールの jQuery 検証をサポートするには、アプリをグローバル化する手順を行う必要があります。 10 進数のコンマを追加する手順については、このGitHubコメント 4076 を参照してください。
イントロダクション
チュートリアル シリーズのこの部分では、ASP.NET Core MVC アプリケーションでの SQL データベースの操作に重点を置いています。
学習内容は次のとおりです。
- ASP.NET Core MVC アプリのEntity Framework Core データベース コンテキストを登録して構成します。
- ローカル開発用のデータベース接続文字列を操作します。
- SQL Server Express LocalDB を開発に使用し、SQL Server オブジェクト エクスプローラーを使用してデータベースとデータを調べます。
- 初期サンプル データを使用してデータベースをシード処理します。
前提条件
このチュートリアルでは、前の手順で設定したデータベース (Part 4) を使用して、ASP.NET Core MVC アプリにモデルを追加します。
データベース コンテキストの操作
MvcMovieContext オブジェクトは、データベースへの接続と、データベース レコードへの Movie オブジェクトのマッピングのタスクを処理します。 データベース コンテキストは、 ファイルにあるProgram.csコンテナーに登録されます。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Core Configuration システムは、ConnectionString キーを読み取ります。 ローカル開発では、appsettings.json ファイルから接続文字列を取得します。
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5;Trusted_Connection=True;MultipleActiveResultSets=true"
}
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
SQL Server Express LocalDB(ローカルデータベース開発用ツール)
LocalDB:
- SQL Server Express データベース エンジンの軽量バージョンで、既定で Visual Studio と共にインストールされます。
- 接続文字列を使用してオンデマンドで開始します。
- プログラム開発を対象としています。 ユーザー モードで実行されるため、複雑な構成はありません。
- 既定では、C:/Users/{user} ディレクトリに .mdf ファイルが作成されます。
データベースのシード
SeedData フォルダーに という名前の新しいクラスを作成します。 生成されたコードを次のコードに置き換えます。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
データベースにムービーがある場合、シード初期化子が返され、ムービーは追加されません。
if (context.Movie.Any())
{
return; // DB has been seeded.
}
シード初期化子の追加
Program.cs の内容を以下のコードに置き換えます。 新しいコードが強調表示されます。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/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.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
データベース内のすべてのレコードを削除します。 これはブラウザーの削除リンクで行うか、SSOX から行うことができます。
アプリをテストします。 アプリに初期化を強制し、Program.cs ファイルのコードを呼び出して、シード メソッドが実行されるようにします。 初期化を強制するには、開Visual Studioコマンド プロンプト ウィンドウを閉じ、Ctrl キーを押しながら F5 キーを押して再起動します。
アプリにシードされたデータが表示されます。
注
小数フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使い、英語 (米国) 以外の日付形式を使う英語以外のロケールの jQuery 検証をサポートするには、アプリをグローバル化する手順を行う必要があります。 10 進数のコンマを追加する手順については、このGitHubコメント 4076 を参照してください。
イントロダクション
チュートリアル シリーズのこの部分では、ASP.NET Core MVC アプリケーションでの SQL データベースの操作に重点を置いています。
学習内容は次のとおりです。
- ASP.NET Core MVC アプリのEntity Framework Core データベース コンテキストを登録して構成します。
- ローカル開発用のデータベース接続文字列を操作します。
- SQL Server Express LocalDB を開発に使用し、SQL Server オブジェクト エクスプローラーを使用してデータベースとデータを調べます。
- 初期サンプル データを使用してデータベースをシード処理します。
前提条件
このチュートリアルでは、前の手順で設定したデータベース (Part 4) を使用して、ASP.NET Core MVC アプリにモデルを追加します。
データベース コンテキストの操作
MvcMovieContext オブジェクトは、データベースへの接続と、データベース レコードへの Movie オブジェクトのマッピングのタスクを処理します。 データベース コンテキストは、 ファイルの ConfigureServices メソッドでStartup.csコンテナーに登録されます。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}
ASP.NET Core Configuration システムは、ConnectionString キーを読み取ります。 ローカル開発では、appsettings.json ファイルから接続文字列を取得します。
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;Trusted_Connection=True;MultipleActiveResultSets=true"
}
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
SQL Server Express LocalDB(ローカルデータベース開発用ツール)
LocalDB:
- SQL Server Express データベース エンジンの軽量バージョンで、既定で Visual Studio と共にインストールされます。
- 接続文字列を使用してオンデマンドで開始します。
- プログラム開発を対象としています。 ユーザー モードで実行されるため、複雑な構成はありません。
- 既定では、C:/Users/{user} ディレクトリに .mdf ファイルが作成されます。
データベースを確認する
View メニューから、SQL Server オブジェクト エクスプローラー (SSOX) を開きます。
Movie テーブルを右クリックし、> View Designer を選択します。
ID の横のキー アイコンに注意してください。 既定では、EF は ID という名前のプロパティを主キーにします。
Movie テーブルを右クリックして、> データを表示 を選択します。
データベースのシード
SeedData フォルダーに という名前の新しいクラスを作成します。 生成されたコードを次のコードに置き換えます。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
データベースにムービーがある場合、シード初期化子が返され、ムービーは追加されません。
if (context.Movie.Any())
{
return; // DB has been seeded.
}
シード初期化子の追加
Program.cs の内容を次のコードに置き換えます。
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MvcMovie.Data;
using MvcMovie.Models;
using System;
namespace MvcMovie
{
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
SeedData.Initialize(services);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred seeding the DB.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
アプリをテストします。
データベース内のすべてのレコードを削除します。 これはブラウザーの削除リンクで行うか、SSOX から行うことができます。
Startup クラスでメソッドを呼び出してアプリを強制的に初期化して、シード メソッドが実行されるようにします。 強制的に初期化するには、IIS Express を停止してから再起動する必要があります。 これは次の方法のいずれかを使用して行うことができます。
通知領域にある IIS Express システム トレイ アイコンを右クリックし、 [終了] または [サイトの停止] をタップします。
- 非デバッグ モードで VS を実行していた場合は、F5 キーを押してデバッグ モードで実行します。
- デバッグ モードで VS を実行していた場合は、デバッガーを停止して、F5 キーを押します。
アプリにシードされたデータが表示されます。
注
小数フィールドに小数点のコンマを入力できない場合があります。 小数点にコンマ (",") を使い、英語 (米国) 以外の日付形式を使う英語以外のロケールの jQuery 検証をサポートするには、アプリをグローバル化する手順を行う必要があります。 10 進数のコンマを追加する手順については、このGitHubコメント 4076 を参照してください。
ASP.NET Core