【发布时间】:2020-04-29 02:58:39
【问题描述】:
我正在使用 EF 核心,我在 STUDENTS 和 SUBJECTS 之间存在多对多关系,如下所示:
public class StudentDetail
{
[Key]
[JsonPropertyName("Id")]
public int Id { get; set; }
[Required]
[Column(TypeName ="nvarchar(50)")]
[JsonPropertyName("Name")]
public string Name { get; set; }
[JsonPropertyName("StudentSubjects")]
public virtual IEnumerable<StudentSubject> StudentSubjects {get; set;}
}
public class SubjectDetail
{
[Key]
[JsonPropertyName("Id")]
public int Id { get; set; }
[Required]
[Column(TypeName = "nvarchar(20)")]
[JsonPropertyName("SubjectName")]
public string SubjectName { get; set; }
[Required]
[JsonPropertyName("Teacher")]
public virtual TeacherDetail Teacher { get; set; }
[JsonPropertyName("StudentSubjects")]
public IEnumerable<StudentSubject> StudentSubjects { get; set; }
}
public class StudentSubject
{
[JsonPropertyName("StudentId")]
public int StudentId { get; set; }
[JsonPropertyName("Student")]
public StudentDetail Student { get; set; }
[JsonPropertyName("SubjectId")]
public int SubjectId { get; set; }
[JsonPropertyName("Subject")]
public SubjectDetail Subject { get; set; }
[Required]
[Column(TypeName = "nvarchar(3)")]
[JsonPropertyName("Grade")]
public string Grade { get; set; }
}
我使用迁移创建我的数据库,所以在我进行迁移之后,数据库是这样创建的:
我需要一个查询,将所有科目与他们的老师和特定学生的年级一起带给我。我试着这样做:
var subjects = await _context.StudentSubject
.Include(s => s.Subject)
.Where(sid => sid.StudentId == student.Id)
.Select(st => st.Subject)
.Include(t => t.Teacher)
.ToListAsync();
但我收到一条错误消息,说我正在尝试在不可查询的实体上使用Include();。有人知道我在做什么错吗?
【问题讨论】:
-
您想使用
public virtual ICollection<T>而不是public IEnumerable<T>。可能还有更多需要更改,但这可能会有所帮助。
标签: sql-server linq entity-framework-core