記事詳細


投稿日
2025年12月15日01時00分
タイトル

wwwroot/images フォルダにある複数の PNG ファイルを、ApplicationDbContext 経由で

内容

以下に 完全・実行可能なサンプルコード を示します。
ポイントは以下です。

  • wwwroot/images のファイル一覧を取得 (Directory.GetFiles)
  • 相対パス(例: "images/xxx.png")を ImageUrl` に保存
  • EF Core を使って一括登録
  • 重複登録防止(既に登録済みの ImageUrl はスキップ)

モデルクラス

Csharp
using System.ComponentModel.DataAnnotations; public class SubjectName { [Key] public int CategoryId { get; set; } [Required] [MaxLength(100)] public string CategoryName { get; set; } [Required] [MaxLength(255)] public string ImageUrl { get; set; } }

ApplicationDbContext.cs

Csharp
using Microsoft.EntityFrameworkCore; public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } public DbSet<SubjectName> SubjectNames { get; set; } // DB登録用メソッド public void SeedImagesFromWwwroot() { try { // wwwroot/images の絶対パスを取得 var imagesPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "images"); if (!Directory.Exists(imagesPath)) { Console.WriteLine($"[ERROR] 画像フォルダが存在しません: {imagesPath}"); return; } // PNGファイル一覧を取得 var pngFiles = Directory.GetFiles(imagesPath, "*.png", SearchOption.TopDirectoryOnly); foreach (var filePath in pngFiles) { var fileName = Path.GetFileName(filePath); // DBに保存する相対パス(例: "images/sample.png") var relativePath = Path.Combine("images", fileName).Replace("\\", "/"); // 重複チェック if (!SubjectNames.Any(s => s.ImageUrl == relativePath)) { var subject = new SubjectName { CategoryName = Path.GetFileNameWithoutExtension(fileName), // ファイル名をカテゴリ名に ImageUrl = relativePath }; SubjectNames.Add(subject); } } SaveChanges(); Console.WriteLine("[INFO] 画像登録が完了しました。"); } catch (Exception ex) { Console.WriteLine($"[ERROR] 登録処理中にエラー: {ex.Message}"); } } }

実行例(Program.cs または Startup.cs)

Csharp
using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); // DbContext登録 builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); var app = builder.Build(); // アプリ起動時に画像登録 using (var scope = app.Services.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>(); db.Database.Migrate(); // マイグレーション適用 db.SeedImagesFromWwwroot(); // 画像登録 } app.Run();

補足

  • CategoryName はここでは PNG ファイル名(拡張子なし)を使っていますが、必要に応じて別の命名ロジックに変更可能です。
  • ImageUrlは相対パスで保存しているので、ビューで表示する際は
    Html
    <img src="~/@Model.ImageUrl" alt="@Model.CategoryName" />
    のように使えます。
  • または
  • @foreach (var item in Model) {

            <tr>

                <td>

                        <img src="~/@item.ImageUrl" alt="@item.Name" style="width: 40px; height: auto;" />

                </td>

Powered by Froala Editor

添付画像

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