Entity Framework - Tipi di entità annidati
Prima di Entity Framework 6, Entity Framework non riconosceva entità o tipi complessi annidati all'interno di altre entità o tipi complessi. Quando Entity Framework ha generato il modello, i tipi annidati sono semplicemente scomparsi.
Diamo un'occhiata a un semplice esempio in cui abbiamo il nostro modello di base con tre entità Student, Course e Enrollment.
Aggiungiamo una proprietà Identity, che è un tipo Person. Person è un'altra entità, contiene le proprietà BirthDate e FatherName.
In termini di Entity Framework, poiché non ha identità ed è parte di un'entità, è un tipo complesso di Entity Framework e in realtà abbiamo avuto supporto per i tipi complessi dalla prima versione di Entity Framework.
Il tipo di persona non è annidato come illustrato nel codice seguente.
public class Student {
public int ID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public DateTime EnrollmentDate { get; set; }
public Person Identity { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
}
public class Person {
public Person(string fatherName, DateTime birthDate) {
FatherName = fatherName;
BirthDate = birthDate;
}
public string FatherName { get; set; }
public DateTime BirthDate { get; set; }
}
Entity Framework saprà come rendere persistenti i tipi Person quando viene usato anche nelle versioni precedenti.
Utilizzando Entity Framework Power Tool vedremo come Entity Framework interpreta il modello. Fare clic con il tasto destro sul file Program.cs e selezionare Entity Framework → Visualizza Entity Data Model (sola lettura)
Ora vedrai che la proprietà Identity è definita nella classe Student.
Se questa classe Person non verrà usata da nessun'altra entità, è possibile nidificarla all'interno della classe Student, ma questa versione precedente di Entity Framework non riconosce i tipi annidati.
Nella versione precedente, si genera nuovamente il modello, non solo il tipo non è riconosciuto, ma poiché non è presente, non è presente nemmeno la proprietà, quindi Entity Framework non persisterà affatto il tipo Person.
public class Student {
public int ID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public DateTime EnrollmentDate { get; set; }
public Person Identity { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
public class Person {
public Person(string fatherName, DateTime birthDate) {
FatherName = fatherName;
BirthDate = birthDate;
}
public string FatherName { get; set; }
public DateTime BirthDate { get; set; }
}
}
Con Entity Framework 6, le entità nidificate e i tipi complessi vengono riconosciuti. Nel codice sopra, puoi vedere che Person è annidato nella classe Student.
Quando usi Entity Framework Power Tool per mostrare come Entity Framework interpreta il modello questa volta, c'è la vera proprietà Identity e il tipo complesso Persona. Quindi Entity Framework manterrà quei dati.
Ora puoi vedere che Identity è un tipo di entità annidato, che non era supportato prima di Entity Framework 6.
Si consiglia di eseguire l'esempio precedente in modo graduale per una migliore comprensione.