28

こんにちは私は最初にEntityFrameworkCodeで作業することを学んでいて、何かを理解できないようです。チュートリアルに基づいて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キーワードを使用してプロパティを作成するとどうなりますか?

4

3 に答える 3

40

遅延読み込み変更の追跡を管理するために使用されます。

EFは、実行時にプロキシタイプを生成します。これは、POCOクラスから継承する動的に生成されたタイプであり、オーバーライドされた仮想プロパティで遅延読み込み/変更の追跡を管理するためにすべてのEFのものを追加します。

したがって、ここではvirtual「魔法のキーワード」ではありません。virtualここにあるので、実行時に追加のEF関連コードでPOCOを継承できます。

于 2013-03-06T12:47:17.687 に答える
7

遅延読み込みを可能にする仮想プロパティがあります

于 2013-03-06T12:43:57.723 に答える
3

virtualキーワードでマークされたプロパティまたはメソッドを作成すると、派生クラスでそれをオーバーライドできるため、作成するオブジェクトに応じて、メソッドにさらに特殊な動作を提供できます。

Entity Frameworkの場合、遅延読み込み動作が使用されることを示す規則もあります。この問題に関する質問はここにあります:EntityFramework4.1仮想プロパティ

于 2013-03-06T12:41:17.820 に答える