記事詳細


投稿日
2025年10月30日03時37分
タイトル

Imageファイル(複数)をデータベースへ格納

内容

以下のように、OnModelCreating メソッド内で wwwroot フォルダ内の画像ファイルを読み取り、それらを Model クラスのフィールドに格納するコードを記述できます。以下はその実装例です。

コード例

Csharp
using System.IO; using System.Linq; using Microsoft.EntityFrameworkCore; public class YourDbContext : DbContext { public DbSet<Category> Categories { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // wwwroot/images フォルダのパスを取得 var imageFolderPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "images"); if (Directory.Exists(imageFolderPath)) { // フォルダ内のすべての .png ファイルを取得 var imageFiles = Directory.GetFiles(imageFolderPath, "*.png"); // データを格納するリストを作成 var categories = imageFiles.Select((filePath, index) => new Category { Id = index + 1, // IDを1から順に割り当て CategoryName = Path.GetFileNameWithoutExtension(filePath), // 拡張子を除いたファイル名 CategoryImage = File.ReadAllBytes(filePath) // 画像ファイルをバイト配列に変換 }).ToList(); // モデルにデータをシード modelBuilder.Entity<Category>().HasData(categories); } } } public class Category { public int Id { get; set; } public string CategoryName { get; set; } public byte[] CategoryImage { get; set; } }

説明

  1. Directory.GetCurrentDirectory():

    • 現在のプロジェクトのルートディレクトリを取得します。
    • ここから wwwroot/images フォルダのパスを構築します。
  2. Directory.GetFiles:

    • 指定したフォルダ内の .png ファイルをすべて取得します。
  3. Path.GetFileNameWithoutExtension:

    • ファイル名から拡張子を除去し、CategoryName に格納します。
  4. File.ReadAllBytes:

    • 画像ファイルをバイト配列に変換し、CategoryImage に格納します。
  5. HasData:

    • OnModelCreating 内でデータをシードするために使用します。

注意点

  • wwwroot フォルダの画像ファイル:

    • 必ず wwwroot/images フォルダに画像ファイルを配置してください。
  • マイグレーションの再作成:

    • このコードを適用した後、Add-Migration と Update-Database を実行してデータベースを更新してください。

このコードを使えば、wwwroot/images 内の複数の画像ファイルをデータベースに格納し、それぞれのファイル名(拡張子なし)とバイト配列を対応付けることができます!

添付画像

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