0

Microsoft のサイトにある contoso 大学のチュートリアルに従っていますが、Entity Framework がどのように機能しているかについて疑問があります。どうぞ...

チュートリアルの最初に、データベース内のテーブルに変換される 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; }
}

チュートリアルに従った後、私はすべての自分Studentsと彼らのそれぞれCourseの (s) と、登録リストのプロパティを一覧表示できるようになりました。

エンティティがStudentクラスをインスタンス化し、それぞれEnrollmentの (s) リストを設定したのはいつですか?

どの登録がその学生にリンクされているかをどのように知るのでしょうか? new constructor() が呼び出されたことはありません。

これは単純かもしれませんが、私はここでちょっと迷っています。

ありがとう

4

1 に答える 1

1

事前に何もインスタンス化する必要はなく、インスタンス化する必要もありません。また、仮想プロパティ自体を表すテーブルにも何もありません。

これらの仮想プロパティは、ナビゲーション情報を格納するために実行時にEFによって使用され、コレクションはnullであるか、0個以上の要素を含むことができます。魔法はありません。EFが必要なときにコレクションを「新しく」するのは、設計によるものです。

If you want to be explicit about it, you can create a constructor on your POCO as well and set your collection equal to a new hashtable.

于 2012-06-01T04:44:20.897 に答える