Ich habe zwei Modellklassen erstellt: Student
und Exam
.Entity Framework 6 Lazy Loading funktioniert nicht
Student:
class Student
{
[Key]
public int StudentId { get; set; }
[Required, MaxLength(30)]
public string FirstName { get; set; }
[Required, MaxLength(50)]
public string LastName { get; set; }
[Required]
public DateTime BirthDate { get; set; }
public virtual ICollection<Exam> Exams { get; set; }
}
Prüfung:
public enum Grade
{
A, B, C, D, E, F
}
class Exam
{
[Key]
public int ExamId { get; set; }
[Required]
public Grade Grade { get; set; }
[ForeignKey("Student"), Required]
public int StudentId { get; set; }
public virtual Student Student { get; set; }
}
Aber es scheint, Lazy Loading-nicht funktioniert, hier ist beispielsweise, wie ich Daten abrufen:
using (var context = new StudentContext())
{
context.Configuration.LazyLoadingEnabled = true;
context.Configuration.ProxyCreationEnabled = true;
var student = context.Students.Single(s => s.LastName == "ABC");
foreach (var exam in student.Exams)
{
Console.WriteLine($"{exam.ExamId}: {exam.Grade}");
}
context.SaveChanges();
}
Und ich bekomme NullReferenceException
wenn ich versuche, auf students.Exams
Eigentum zuzugreifen. Was ist falsch in meinem Code?
Das Problem mit meinem Code ist, dass Entity Framework Lazy Loading funktioniert nicht und ich weiß nicht warum. Es geht nicht darum, Exams
nicht zu initialisieren, weil Entity Framework es tun sollte allein, wenn ich versuche, auf Exams
Eigenschaft zuzugreifen.
@Nasreddine, nicht wirklich. Ich habe gelesen, dass EF während Lazy Loading sollte feststellen, ob Sammlung ist initialisiert oder nicht und initialisieren sie. Ich habe die Initialisierung im Konstruktor hinzugefügt, aber Lazy Loading funktioniert immer noch nicht. Jetzt, wenn ich versuche, Schülerprüfungen zu wiederholen (diese Prüfungen existieren in der Datenbank), bekomme ich keine Ausgabe. 'student.Exams' ist eine leere Sammlung, aber EF sollte sie laden. –
@TomTom, @Rene Vogt, wie ist meine Frage ein Duplikat davon, wie man NRE repariert? Mein Problem ist, dass EF Lazy nicht funktioniert, nicht weil 'Exams' null ist, weil EF diese Sammlung selbst initialisieren soll. –
@AlexanderDerck, Initialisierung der Sammlung im Konstruktor verhindert "NullReferenceException", aber die Sammlung ist leer, auch wenn ich in der Datenbank Prüfungen mit der ID eines bestimmten Schülers habe. Ich habe viele ähnliche Fragen gelesen, konnte meinen Code aber immer noch nicht verwenden. –