从多对多关系中获取和显示数据

本文关键字:显示 数据 获取 关系 | 更新日期: 2023-09-27 17:59:15

我使用的是.net mvc核心。我与3张表有很多对很多的关系:课程,讲师,课程讲师。(课程讲师为连接表)我想做的是显示一个课程条目的所有讲师,所以它就像一个有3列的表:Id、CourseName和讲师。我在获取数据然后显示数据时遇到了问题。关键是要显示某个科目的所有讲师(例如,如果有一个或多个讲师)。现在我不确定如何做到这一点。因为我的观点只会采用我的课程模式。我不确定如何通过EF访问讲师姓名。

在我看来,我应该从CourseLecturers中选择CourseId等于我的CourseId的所有条目,然后以某种方式连接我的CourserLecturers表(讲师id)中主键的另一部分的id,并用我拥有的密钥选择所有讲师。在这一点上,我既不确定如何选择数据,也不确定如何显示它

这是我的课程模型:

public partial class Courses
{
    [Key]
    public int CourseId { get; set; }
    public string CourseTitle { get; set; }
}

这是我的讲师模型:

public partial class Lecturers
{
   [Key]
    public int LecturerId { get; set; }
    public string Lecturer { get; set; }
}

这是我为CourseLecturers设计的模型:

public partial class CourseLecturers
{
    [Key]
    [ForeignKey(nameof(Courses))]
    public int CourseId { get; set; }
    public Courses Courses { get; set; }
    [Key]
    [ForeignKey(nameof(Lecturers))]
    public int LecturerId { get; set; }
    public Lecturers Lecturers { get; set; }
}

我是否应该在我的课程类中添加CourseLecturers类,然后尝试访问这样的数据?但如果这样做有效,如何显示数据,我是否在模型中创建一个新的DisplayClass,然后将该DisplayClass传递给视图?

这是我在控制器中的索引方法:

public IActionResult Index()
    {
        return View(_context.Courses.Include(c => c.CourseLecturers).ThenInclude(cl => cl.Lecturers)); 
    }

我的观点是这样的:

  @foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CourseId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.CourseTitle)
        </td>
        <td>
        @Html.DisplayFor(modelItem=>item.CourseLecturers.Lecturers.Lecturer)
        </td>
    </tr>
}

显示的内容如下:http://imgur.com/a/lVZ0Q

从多对多关系中获取和显示数据

这是只读的吗。我会在你的DB中定义一个比EF快得多的视图,并创建一个只读实体来访问项目。

我想您正在寻找的是这里,它详细解释了如何在ASP中使用EF创建具有多对多关系的数据模型。Net MVC。