Essa palavra-chave virtual está relacionada ao tópico de carregamento de dados da estrutura da entidade (carregamento lento, carregamento rápido e carregamento explícito).
Você deve usar a palavra-chave virtual quando desejar carregar dados com carregamento lento.
carregamento lento é o processo pelo qual uma entidade ou coleção de entidades é carregada automaticamente do banco de dados na primeira vez que é acessada.
Por exemplo, ao usar a classe de entidade Blog definida abaixo, as Postagens relacionadas serão carregadas na primeira vez que a propriedade de navegação Postagens for acessada:
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; }
}
O carregamento lento da coleção Postagens pode ser desativado, tornando a propriedade Postagens não virtual.
se o carregamento lento estiver desativado, o carregamento da coleção Postagens ainda poderá ser alcançado usando o carregamento antecipado (usando o método Incluir) ou o carregamento explícito de entidades relacionadas (usando o método Load).
Carregando ansiosamente:
using (var context = new BloggingContext())
{
// Load all blogs and related posts
var blogs1 = context.Blogs
.Include(b => b.Posts)
.ToList();
}
Carregando explicitamente:
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();
}