web-dev-qa-db-fra.com

Comprendre les premières propriétés virtuelles du code

Salut, j'apprends juste à travailler avec Entity Framework Code First et je n'arrive pas à comprendre quelque chose. J'ai créé trois modèles basés sur un tutoriel:

public class Course
{
    public int CourseID { get; set; }
    public string Title { get; set; }
    public int Credits { get; set; }
    public virtual ICollection<Enrollment> Enrollments{ get; set; }
}

public class Enrollment
{
    public int EnrollmentID { get; set; }
    public int CourseID { get; set; }
    public int StudentID { get; set; }
    public decimal? Grade { get; set; }
    public virtual Course Course { get; set; }
    public virtual Student Student { get; set; }
}
public class Student
{
    public int StudentID { get; set; }
    public string LastName { get; set; }
    public string FirstMidName { get; set; }
    public DateTime EnrollmentDate { get; set; }
    public virtual ICollection<Enrollment> Enrollments { get; set; }
}

Mon problème est que je ne comprends pas ce que font les propriétés avec virtual.Si je vérifie la base de données, il n'y a pas de caisse de colonne pour chacune des propriétés, seulement pour les autres.

Que se passe-t-il donc lorsque vous créez une propriété avec le mot-clé virtuel?

27
aleczandru

Il est utilisé pour gérer chargement paresseux et suivi des modifications.

EF générera des types de proxy lors de l'exécution, qui sont des types générés dynamiquement qui héritent de vos classes POCO et ajouteront tous les éléments EF pour gérer le chargement paresseux/le suivi des modifications dans propriétés virtuelles remplacées =.

Donc, virtual n'est pas un "mot clé magique" ici, virtual est là pour que vos POCO puissent être hérités avec du code EF supplémentaire lors de l'exécution.

37
ken2k

Les propriétés virtuelles sont là pour permettre le chargement paresseux

6
gregjer

Lorsque vous créez une propriété ou une méthode marquée avec le mot-clé virtuel, vous serez autorisé à la remplacer dans une classe dérivée, offrant ainsi à votre méthode un comportement plus spécialisé en fonction des objets que vous créez.

Dans le cas d'Entity Framework, c'est également une convention qui souligne que le comportement de chargement paresseux est utilisé. Une question à ce sujet existe ici: Entity Framework 4.1 Virtual Properties

3
Freeman