この仮想キーワードは、エンティティフレームワークからのデータの読み込み(遅延読み込み、積極読み込み、および明示読み込み)のトピックに関連しています。
遅延読み込みでデータを読み込む場合は、virtualキーワードを使用する必要があります。
遅延読み込みは、エンティティまたはエンティティのコレクションが最初にアクセスされたときにデータベースから自動的に読み込まれるプロセスです。
たとえば、以下で定義されているブログエンティティクラスを使用する場合、関連する投稿は、投稿ナビゲーションプロパティに初めてアクセスしたときに読み込まれます。
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プロパティを非仮想にすることでオフにできます。
遅延読み込みがオフの場合でも、積極的な読み込み(Includeメソッドを使用)または関連エンティティを明示的に読み込み(Loadメソッドを使用)すると、Postsコレクションの読み込みを実行できます。
熱心な読み込み:
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();
}