【发布时间】:2015-11-02 13:34:33
【问题描述】:
我正在尝试解决 ASP.Net MVC 应用程序中的延迟加载问题。例如,我有一个类,其属性是一个集合(Employees)。我希望仅在需要加载集合时才加载:
public class Department
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int DepartmentId { get; set; }
public string DepartmentName { get; set; }
[ForeignKey("DepartmentId")]
public Lazy<ICollection<Employee>> Employees { get; set; }
}
首先,我不确定是否应该延迟加载类或集合
public Lazy<ICollection<Employee>> Employees { get; set; }
public ICollection<Lazy<Employee>> Employees { get; set; }
我假设收藏。
接下来,我似乎找不到相关示例来实际加载属性/集合,一旦我需要它并且在类被实例化之后。我也不确定这是在类本身还是在我的 MVC 控制器中完成的。
感谢任何帮助。
【问题讨论】:
-
有很多例子 - 当你创建一个新的 Lazy 时,你在它的构造函数中传递了 ghe 工厂方法。只有在请求 Lazy 的值时才会调用工厂。仅仅声明一个
Lazy属性并不意味着任何东西都会被延迟评估。 -
部门类是 EF 模型的一部分吗?在这种情况下,您不需要声明集合惰性
-
顺便说一句,您是否将延迟加载(ORM 概念)与无关的延迟评估概念(
Lazy是关于什么)混为一谈? 关系默认是延迟加载的——你必须使用Include()调用来急切地加载相关对象。 -
它是 EF 代码优先。有很多例子,但我可能无法破译它们并将它们应用到我的例子中。
-
我可能混淆了概念。基本上,如果我将员工集合设置为虚拟,我将获取每个部门的所有员工。当我打电话给班级时。当我想向所有员工展示一次离职时,这只是一个好主意。另一方面,当我在员工视图上有一个部门下拉列表时,我不想在实例化此类时为每个离职加载每个员工。希望这是有道理的。
标签: asp.net-mvc entity-framework collections lazy-loading