Sto cercando di ottenere gli studenti dal database e includere anche le entità del corso corrispondenti a loro, ma sembra che stia facendo qualcosa di sbagliato.
questa è una classe di studenti:
public class Student
{
public int StudentID { get; set; }
public string Name { get; set; }
public int CourseID { get; set; }
public virtual Course Course { get; set; }
}
questa è la lezione del corso:
public class Course
{
public int CourseID { get; set; }
public string Name { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
e rivivo la collezione di entità studentesche come mostrato di seguito:
context.Students.Include(i => i.Course).ToList();
Se rimuovo il metodo di inclusione, ottengo i dati, ma la proprietà del corso dell'oggetto studente è nullo.
PS Lo sto testando con Postman e con "Includi" non riesco a ottenere nulla.
Se commento questo
public virtual ICollection<Student> Students { get; set; }
tutto funziona bene
Ho messo il codice completo su github:
È necessario configurare il serializzatore per ignorare i riferimenti circolari nel progetto.
Quindi per questo devi aggiungere la seguente riga di codice all'interno del metodo ConfigureServices
in Startup.cs
Piace
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options => {
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
}
A seconda del campione trovato qui https://github.com/aspnet/EntityFramework.Docs/tree/master/samples/core/Querying/Querying
Ho scritto una soluzione, ma non so se è un buon approccio per questo problema:
Ho creato la classe StudentCourse e l'ho definita come mostrato di seguito:
public class StudentCourse
{
public int StudentCourseID { get; set; }
public int StudentID { get; set; }
public Student Student{ get; set; }
public int CourseID { get; set; }
public Course Course { get; set; }
}
E ho modificato la classe del corso come mostrato di seguito:
public class Course
{
public int CourseID { get; set; }
public string Name { get; set; }
public virtual ICollection<StudentCourse> Students { get; set; }
}