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