我一直在关注微软网站上的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)列表填充它?
它如何知道哪些注册与该学生相关联? 我没有看到任何新的构造函数()被称为。
这可能很简单,但我在这里丢失了。
由于
答案 0 :(得分:1)
它没有提前实例化任何内容,也没有必要。并且表中也没有任何表示虚拟属性的内容。
EF在运行时使用这些虚拟属性来存储导航信息,集合可以为null或包含0个或更多元素。没有任何魔力,只需按设计,EF“new”就可以在需要的时候使用。
如果你想明确它,你也可以在你的POCO上创建一个构造函数,并将你的集合设置为一个新的哈希表。