こんにちは、Entity Framework Code Firstで作業することを学んでいるだけで、何かを理解できないようです。チュートリアルに基づいて3つのモデルを作成しました。
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; }
}
私の問題は、仮想のプロパティが何をしているのか理解していないことです。データベースをチェックすると、各プロパティの列クレートはなく、他のプロパティのみです。
では、virtualキーワードを使用してプロパティを作成するとどうなりますか?
lazy loadingおよびchange trackingの管理に使用されます。
EFはランタイムにプロキシタイプを生成します。これは動的に生成されるタイプで、POCOクラスから継承するであり、遅延ロードを管理するためにすべてのEFスタッフを追加しますオーバーライドされた仮想プロパティで追跡を変更します=。
したがって、ここではvirtual
は「魔法のキーワード」ではありません。virtual
はここにあるため、POCOは実行時に追加のEF関連コードで継承できます。
遅延読み込みを可能にする仮想プロパティがあります
Virtualキーワードでマークされたプロパティまたはメソッドを作成すると、派生クラスでそれをオーバーライドできるため、作成したオブジェクトに応じて、メソッドにさらに特殊な動作を提供できます。
Entity Frameworkの場合、遅延読み込み動作が使用されることを指摘する規則もあります。この問題に関する質問はここにあります: Entity Framework 4.1仮想プロパティ