Esta palabra clave virtual está relacionada con el tema de cargar datos desde el marco de la entidad (carga diferida, carga ansiosa y carga explícita).
Debe usar una palabra clave virtual cuando desee cargar datos con carga diferida.
la carga diferida es el proceso mediante el cual una entidad o colección de entidades se carga automáticamente desde la base de datos la primera vez que se accede a ella.
Por ejemplo, cuando se usa la clase de entidad Blog definida a continuación, las Publicaciones relacionadas se cargarán la primera vez que se acceda a la propiedad de navegación Publicaciones:
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public string Tags { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
La carga diferida de la colección Posts se puede desactivar haciendo que la propiedad Posts no sea virtual.
si la carga diferida está desactivada, la carga de la colección de publicaciones aún se puede lograr usando carga ansiosa (usando el método Incluir) o cargando explícitamente entidades relacionadas (usando el método Load).
Cargando ansiosamente:
using (var context = new BloggingContext())
{
// Load all blogs and related posts
var blogs1 = context.Blogs
.Include(b => b.Posts)
.ToList();
}
Cargando explícitamente:
using (var context = new BloggingContext())
{
var blog = context.Blogs.Find(1);
// Load the posts related to a given blog
context.Entry(blog).Collection(p => p.Posts).Load();
}