記事詳細


投稿日
2026年05月07日23時55分
タイトル

ASP.NET mvc: VisualStudioのプロジェクトです。アプリ起動時に、作成したデータベースにEntity Framework(10.0)を使ってDBContextクラス内からデータを挿入するコードのサンプルはありますか?_3

内容

わかりました。では、前回のコード例をさらに違った形で、
「アプリ起動時にサービスクラス経由で初期データを投入する」 パターンにしてみます。
これにより、Program.cs がすっきりし、初期化ロジックを分離できます。

① DbContext クラス

Csharp
using Microsoft.EntityFrameworkCore; public class AppDbContext : DbContext { public DbSet<User> Users { get; set; } public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } }

② モデルクラス

Csharp
public class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } }

③ 初期データ投入用サービス

Csharp
public static class DatabaseSeeder { public static void Seed(AppDbContext db) { // 既にデータがある場合は何もしない if (db.Users.Any()) return; var initialUsers = new List<User> { new User { Name = "Admin", Email = "admin@example.com" }, new User { Name = "Guest", Email = "guest@example.com" } }; db.Users.AddRange(initialUsers); db.SaveChanges(); } }

④ Program.cs(ASP.NET Core MVC の場合)

Csharp
var builder = WebApplication.CreateBuilder(args); // DbContext 登録 builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); var app = builder.Build(); // 起動時に DB 作成&初期化 using (var scope = app.Services.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService<AppDbContext>(); db.Database.Migrate(); DatabaseSeeder.Seed(db); // 初期データ投入 } app.MapDefaultControllerRoute(); app.Run();

⑤ 接続文字列例(appsettings.json)

Json
{ "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=MyAppDb;Trusted_Connection=True;TrustServerCertificate=True;" } }

この構成のメリット

  • 初期化処理を DatabaseSeeder に分離することで、テストや再利用が容易。
  • Program.cs がシンプルになり、責務が明確化。
  • 条件付き挿入で重複データを防止。

この方法なら、将来的に「ユーザー以外の初期データ」も同じ仕組みで追加できます。
もしご希望なら、このパターンを ASP.NET MVC(.NET Framework版) に合わせたコードにも変換できますが、そちらも作りますか?

Powered by Froala Editor

添付画像

画像はありません
Genreのカテゴリ-名
Others
編集 | 記事一覧