記事詳細


投稿日
2025年10月29日00時11分
タイトル

wwwrootのImageファイルをデータベースに登録

内容

以下のように、OnModelCreating メソッド内で wwwroot 内の画像ファイルを読み込み、それらを CategoryImagebyte[] 型)と CategoryName(拡張子を除いたファイル名)に格納する方法を実装できます。

コード例

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 imageDirectory = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "images"); if (Directory.Exists(imageDirectory)) { // 画像ファイルを取得(.png ファイルのみ) var imageFiles = Directory.GetFiles(imageDirectory, "*.png"); // データを格納 var categories = imageFiles.Select(filePath => new Category { 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; } = string.Empty; public byte[] CategoryImage { get; set; } = Array.Empty<byte>(); }

ポイント解説

  1. Directory.GetFiles を使用して画像ファイルを取得:

    • Path.Combine を使い、wwwroot/images ディレクトリのパスを動的に取得。
    • Directory.GetFiles を使い、特定の拡張子(例: .png)のファイルを取得。
  2. Path.GetFileNameWithoutExtension で拡張子を除去:

    • ファイル名から拡張子を除いた名前を取得し、CategoryName に格納。
  3. File.ReadAllBytes で画像をバイト配列に変換:

    • 画像ファイルを読み込み、byte[] 型に変換して CategoryImage に格納。
  4. HasData を使用して初期データを登録:

    • modelBuilder.Entity<Category>().HasData() を使い、データベースに初期データを登録。

注意点

  • HasData の制約:

    • HasData を使用する場合、Id プロパティ(主キー)は必須です。ユニークな値を設定してください。
    • もし Id を自動生成したい場合は、OnModelCreating ではなく、別の方法でデータを登録する必要があります。
  • 画像ファイルのサイズ:

    • 画像ファイルが大きすぎる場合、データベースに保存するのではなく、ファイルパスを保存する方法も検討してください。
  • マイグレーションの更新:

    • HasData を使用した場合、Add-Migration と Update-Database を実行してデータベースを更新してください。

このコードをベースに、必要に応じてカスタマイズしてください!

添付画像

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