实体疑虑 - 遵循Contoso大学教程

时间:2012-05-31 20:07:35

标签: asp.net-mvc-3 entity-framework-4 ef-code-first entity

我一直在关注微软网站上的contoso大学教程,我对实体框架如何做一些事情有些怀疑。我们走了......

在本教程的开头,我们创建了三个类,这些类将转换为数据库中的表。

我想知道实体何时以及如何实例化我的类以填充对象。

我使用代码优先方法。

示例:

我正在使用的课程:

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)列表填充它?

它如何知道哪些注册与该学生相关联? 我没有看到任何新的构造函数()被称为。

这可能很简单,但我在这里丢失了。

由于

1 个答案:

答案 0 :(得分:1)

它没有提前实例化任何内容,也没有必要。并且表中也没有任何表示虚拟属性的内容。

EF在运行时使用这些虚拟属性来存储导航信息,集合可以为null或包含0个或更多元素。没有任何魔力,只需按设计,EF“new”就可以在需要的时候使用。

如果你想明确它,你也可以在你的POCO上创建一个构造函数,并将你的集合设置为一个新的哈希表。