記事詳細


投稿日
2026年07月25日14時21分
タイトル

ASP.NET 10.0 Core MVC: 親(Category)と子(SubCategory)のリレーションを想定したModels/classのコードを教えてくださ

内容

ASP.NET Core 10.0 MVC(.NET 8ベース)で 親(Category) と 子(SubCategory) の1対多リレーションを想定した Models クラス の完全なコード例を示します。
Entity Framework Core を使い、ナビゲーションプロパティ と データアノテーション を適切に設定します。

Models/Category.cs

Csharp
using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace YourApp.Models { /// <summary> /// 親カテゴリモデル /// </summary> public class Category { [Key] // 主キー public int CategoryId { get; set; } [Required(ErrorMessage = "カテゴリ名は必須です。")] [StringLength(100, ErrorMessage = "カテゴリ名は100文字以内で入力してください。")] public string Name { get; set; } = string.Empty; // 子カテゴリとの1対多リレーション public ICollection<SubCategory> SubCategories { get; set; } = new List<SubCategory>(); } }

Models/SubCategory.cs

Csharp
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace YourApp.Models { /// <summary> /// 子カテゴリモデル /// </summary> public class SubCategory { [Key] // 主キー public int SubCategoryId { get; set; } [Required(ErrorMessage = "サブカテゴリ名は必須です。")] [StringLength(100, ErrorMessage = "サブカテゴリ名は100文字以内で入力してください。")] public string Name { get; set; } = string.Empty; // 外部キー [ForeignKey(nameof(Category))] public int CategoryId { get; set; } // 親カテゴリへのナビゲーションプロパティ public Category? Category { get; set; } } }

DbContext 設定例(Data/ApplicationDbContext.cs)

Csharp
using Microsoft.EntityFrameworkCore; using YourApp.Models; namespace YourApp.Data { public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } public DbSet<Category> Categories { get; set; } public DbSet<SubCategory> SubCategories { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // Category - SubCategory の1対多リレーション設定 modelBuilder.Entity<Category>() .HasMany(c => c.SubCategories) .WithOne(sc => sc.Category) .HasForeignKey(sc => sc.CategoryId) .OnDelete(DeleteBehavior.Cascade); // 親削除時に子も削除 } } }

補足

  • Category と SubCategory は 1対多 の関係です。
  • OnDelete(DeleteBehavior.Cascade) により、親削除時に子も自動削除されます。
  • DataAnnotations によるバリデーションを追加して、MVC のフォーム入力時に検証可能にしています。
  • このまま dotnet ef migrations add InitialCreate → dotnet ef database update でテーブルが作成されます。

もしご希望であれば、このモデルを使った CRUD コントローラーとビューのサンプル も作成できます。
次にそれを作れば、すぐに動く ASP.NET Core MVC アプリになりますが、作成しますか?

Powered by Froala Editor

添付画像

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