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

如何在ASP.NET Core MVC与SQL Server中根据存储ID获取名称

解决方法:根据学校ID显示学校名称

要实现根据学生的ClassId显示对应的学校名称,需通过Entity Framework的导航属性和关联数据加载完成,具体步骤如下:


1. 配置实体类的关联关系

检查并修改StudentTable和ClassTable实体类,添加导航属性建立两者的关联:

StudentTable.cs

namespace StudentApp.Models.Entity
{
    public class StudentTable
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int ClassId { get; set; }
        
        // 导航属性:关联对应的学校/班级
        public virtual ClassTable Class { get; set; }
    }
}

ClassTable.cs

namespace StudentApp.Models.Entity
{
    public class ClassTable
    {
        public int Id { get; set; }
        public string ClassName { get; set; }
        
        // 可选:反向导航,关联该学校下的所有学生
        public virtual ICollection<StudentTable> Students { get; set; } = new List<StudentTable>();
    }
}

2. 修改控制器,加载关联的学校数据

在StudentTableController的Index方法中,使用Include方法同时加载学生对应的学校数据(需引入Microsoft.EntityFrameworkCore命名空间):

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using StudentApp.Models.Entity;
using Microsoft.EntityFrameworkCore; // 添加该命名空间

namespace StudentApp.Controllers
{
    public class StudentTableController : Controller
    {
        StudentDatabaseContext db = new StudentDatabaseContext();

        public IActionResult Index()
        {
            // 显式加载关联的学校数据
            var studentList = db.StudentTables.Include(s => s.Class).ToList();
            return View(studentList);
        }
    }
}

3. 修改视图,显示学校名称而非ID

在Index.cshtml中,将显示ClassId的代码替换为导航属性中的学校名称:

<td>
    @* 使用?.运算符避免空引用异常(若学生未分配学校) *@
    @item.Class?.ClassName
    @* 可选:显示默认值写法:@(item.Class?.ClassName ?? "未分配学校") *@
</td>

额外说明

  • 确保数据库中StudentTable的ClassId与ClassTable的Id已配置为正确的外键关联(从你的表结构来看已满足)。
  • Include是Entity Framework中显式加载关联数据的方式,确保查询学生时同时获取对应的学校信息。

内容的提问来源于stack exchange,提问作者Emir Bolat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:15:36