我正在使用.NET Core MVC,情况就是这样。
我有一个数据库,有很多关系。
我有一个"课程"表。我有一个"讲师"表
我还有一张桌子" CourseLecturers"使用复合键,由2个id组成。 LecturerId和CoursesID。
我正在使用Entity Framework和Model View Controller来显示我的数据。
我Courses
表的模型如下所示:
public partial class Courses
{
[Key]
public int CourseId { get; set; }
public string CourseTitle { get; set; }
}
我的Lecturers
表的模型看起来像similair:
public partial class Lecturers
{
[Key]
public int LecturerId { get; set; }
public string Lecturer { get; set; }
}
我的CourseLecturers
表的模型如下所示:
public partial class CourseLecturers
{
public int CourseId { get; set; }
public int LecturerId { get; set; }
}
我有或者我想做的问题是:我想使用我的CourseLecturers控制器,以便它显示CourseTitle和Lecturer。不是CourseId和LecturerId。有什么方法可以访问这些属性吗?
这是我的Index
控制器中的CourseLecturers
方法:
public IActionResult Index()
{
/*
CourseLecturers courseLecturers = new CourseLecturers();
List<String> lista=new List<String>();
foreach (var item in _context.CourseLecturers)
{
lista.Add(_context.Courses.Where(c => c.CourseId == courseLecturers.CourseId).ToString());
}
*/
return View(_context.CourseLecturers.ToList());
}
我正在疯狂地试验控制器,这将只返回默认的整数和id。 (因为我评论了代码)我不知道该向谁求助。因为我的CourseLecturers模型有两个整数,所以甚至可以出现两个字符串而不是整数吗?不允许这样的事情似乎很愚蠢。所以我能得到的任何帮助都将不胜感激。
尝试stuartd解决方案后
Soo,这是 CourseLecturers 表的默认上下文:
modelBuilder.Entity<CourseLecturers>(entity =>
{
entity.HasKey(e => new { e.LecturerId, e.CourseId })
.HasName("PK_courseLecturers");
entity.ToTable("courseLecturers");
entity.Property(e => e.LecturerId).HasColumnName("lecturerID");
entity.Property(e => e.CourseId).HasColumnName("courseID");
});
抛出构建错误。 我对该代码所做的更改如下:
modelBuilder.Entity<CourseLecturers>(entity =>
{
entity.HasKey(e => new { e.Lecturers.LecturerId, e.Courses.CourseId })
.HasName("PK_courseLecturers");
entity.ToTable("courseLecturers");
entity.Property(e => e.Lecturers.LecturerId).HasColumnName("lecturerID");
entity.Property(e => e.Courses.CourseId).HasColumnName("courseID");
});
哪个是正确的,但会引发异常: 类型&#39; System.ArgumentException&#39;的例外情况发生在Microsoft.EntityFrameworkCore.dll中但未在用户代码中处理
附加信息:属性表达式&#39; e =&gt; new&lt;&gt; f__AnonymousType1`2(LecturerId = e.Lecturers.LecturerId,CourseId = e.Courses.CourseId)&#39;无效。表达式应代表属性访问权限:&#39; t =&gt; t.MyProperty&#39 ;.指定多个属性时,请使用匿名类型:&#39; t =&gt;新{t.MyProperty1,t.MyProperty2}&#39;。
所以,就是这样。
答案 0 :(得分:0)
您的CourseLecturers
课程应该包含对实际Course
和Lecturer
的引用,而不是ID:
public partial class CourseLecturers
{
public Course Course { get; set; }
public Lecturer Lecturer { get; set; }
}
答案 1 :(得分:0)
所以,对我有用的解决方案是:
在联结表中你需要添加&#34; [ForeignKey(nameof(nameOfTable))]&#34;对于主键的每个部分(因为我有一个复合PK)。
我的联结表看起来像这样:
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; }
}
在我的联结表控制器中,使用index方法,您需要将列表返回到您的视图,如下所示:
public IActionResult Index()
{
return View(_context.CourseLecturers
.Include(c => c.Courses).Include(c => c.Lecturers).ToList());
}
Atleast这对我有用。
最后,在你看来,你有类似的东西:
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Courses.CourseTitle)
</td>
<td>
@Html.DisplayFor(modelItem => item.Lecturers.Lecturer)
</td>
</tr>
}
这就是它最终对我有用的方式。