You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core(.NET 6)中如何显示分类名称而非ID?

解决书籍索引页显示分类ID而非名称的问题

1. 检查实体类关联定义

确保你的Book实体类同时保留外键字段和分类导航属性:

public class Book
{
    // 其他书籍属性
    public int CategoryId { get; set; } // 关联分类的外键
    public Category Category { get; set; } // 分类导航属性
}

同时Category实体类需要添加反向导航属性:

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Book> Books { get; set; } = new List<Book>(); // 关联书籍集合
}

2. 确认DbContext中的关系配置

在数据库上下文类中,通过Fluent API明确配置书籍与分类的一对多关系:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Book>()
        .HasOne(b => b.Category)
        .WithMany(c => c.Books)
        .HasForeignKey(b => b.CategoryId);
}

3. 查询时显式加载分类数据

在Books控制器的Index动作方法中,必须用Include方法加载关联的分类数据(EF Core默认不会自动加载导航属性):

public async Task<IActionResult> Index()
{
    var books = _context.Books.Include(b => b.Category).ToListAsync();
    return View(await books);
}

4. 修改视图显示逻辑

在书籍Index视图里,把显示分类ID的代码替换为显示分类名称:

<!-- 原代码 -->
<td>@item.CategoryId</td>

<!-- 修改后代码 -->
<td>@(item.Category?.Name ?? "未分类")</td>

用空条件运算符?.和空合并运算符??,避免因分类数据未加载导致的空引用异常。

5. 修正错误的迁移操作

不要手动修改Migrations文件,按以下流程更新:

  • 修改实体类和DbContext配置后,在Package Manager Console执行:
    Add-Migration UpdateBookCategoryRelation
    
  • 再更新数据库:
    Update-Database
    

内容的提问来源于stack exchange,提问作者Trần Quang Khải

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:45:48