[英]Entity framework one to many
我正在使用Entity Framework,并且具有以下类
class Student
{
[Key]
public virtual int StudentID {get; set;}
public virtual string StudentName {get; set;}
public virtual ICollection<Note> Notes {get; set;}
}
class Note
{
[Key]
public virtual int NoteID {get; set;}
public virtual int StudentID {get; set;}
public virtual string Message {get; set;}
}
class StudentDBContext:DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Note> Notes { get; set; }
}
综上所述,我有一班学生,每个学生都有很多笔记。 现在,我想使用Linq检索和显示特定学生的所有笔记。 所以我尝试
using (StudentDBContext a = new StudentDBContext())
{
var b = from c in a.Student
where c.StudentID == 1001
select c;
var currStudent = b.FirstOrDefault();
Console.WriteLine(currStudent.StudentName);
//display all the messages of the current student
foreach (var currNote in currStudent.Notes)
Console.WriteLine(currNote.Message);
}
在上面的代码中,因为Student.Notes始终为null,所以我的foreach块始终失败。 我是否缺少初始化Student.Notes并从数据库填充它的步骤?
您的班级学生和记事应公开。
运行以下代码:
class Program {
static void Main(string[] args) {
using ( StudentDBContext efc = new StudentDBContext()) {
foreach (var v in efc.Students) {
Console.WriteLine("{0}", v.StudentName);
foreach (var vv in v.Notes) {
Console.WriteLine(" {0}", vv.Message);
}
}
}
}
}
public class Student {
public Student() {
//Notes = new List<Note>();
}
[Key]
public int StudentID {get; set;}
public virtual string StudentName {get; set;}
public virtual ICollection<Note> Notes {get; set;}
}
public class Note {
[Key]
public int NoteID {get; set;}
public int StudentID {get; set;}
public string Message {get; set;}
}
class StudentDBContext:DbContext {
public DbSet<Student> Students { get; set; }
public DbSet<Note> Notes { get; set; }
}
尝试这个:
using (StudentDBContext a = new StudentDBContext())
{
var b = ((from c in a.Student
join b in a.Notes on b.StudentId equals c.StudentId into sNotes
from notes in sNotes.DefaultIfEmpty()
where c.StudentId==1001
select c).SingleOrDefault();
if (b != null )
...
}
请注意,Entity Framework会延迟加载数据。 因此,如果您不做任何事情来填充它,那么您将不会得到它。 还有其他方法可以执行此操作,但除其他外,此查询清楚地记录了您想要的学生和笔记。
这不应该是虚拟的。
public virtual NoteID {get; set;}
它应该是一个整数:
public int NoteID {get; set;}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.