如何在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
相关产品推荐
相关产品推荐

