Это виртуальное ключевое слово связано с темой загрузки данных из структуры сущностей (отложенная загрузка, полная загрузка и явная загрузка).
Вы должны использовать виртуальное ключевое слово, когда вы хотите загрузить данные с отложенной загрузкой.
отложенная загрузка - это процесс, при котором сущность или коллекция сущностей автоматически загружаются из базы данных при первом обращении к ней.
Например, при использовании класса сущности Блог, определенного ниже, связанные сообщения будут загружаться при первом обращении к свойству навигации по сообщениям:
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; }
}
Ленивую загрузку коллекции Posts можно отключить, сделав свойство Posts не виртуальным.
если отложенная загрузка отключена, загрузка коллекции Posts все еще может быть достигнута с помощью активной загрузки (с помощью метода Include) или явной загрузки связанных объектов (с помощью метода Load).
Жадно загружается:
using (var context = new BloggingContext())
{
// Load all blogs and related posts
var blogs1 = context.Blogs
.Include(b => b.Posts)
.ToList();
}
Явно загрузка:
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();
}