【问题标题】:Entity doubts - following Contoso University Tutorial实体疑问 - 遵循 Contoso 大学教程
【发布时间】:2012-05-31 20:07:35
【问题描述】:

我一直在关注 Microsoft 网站上的 contoso 大学教程,但我对 Entity Framework 如何做一些事情有一些疑问。来了……

在教程开始时,我们创建了三个类,它们将在我的数据库中转换为表。

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

我使用代码优先的方法。

例子:

我正在使用的类:

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

它如何知道哪些注册与该学生相关联? 我没有看到任何新的 constructor() 被调用过。

这可能很简单,但我有点迷路了。

谢谢

【问题讨论】:

  • 如果你的类中具有以下格式的属性 SomeOtherClassID EF 将其设为外键。因此,在 Enrollments 类中,CourseID 和 StudentID 是 Student 和 Course 表的外键。 ICollection 用于描述一对多关系。

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


【解决方案1】:

它不会提前实例化任何东西,也没有必要。而且表格中也不会有任何代表虚拟财产的东西。

EF 在运行时使用这些虚拟属性来存储导航信息,集合可以为 null 或包含 0 个或多个元素。没有什么神奇之处,EF 在需要时“新建”集合只是设计使然。

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

【讨论】:

    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 2022-01-20
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2022-01-28
    • 1970-01-01
    相关资源
    最近更新 更多