C# POCO(EF)类中ICollection的目的是什么?

C# POCO(EF)类中ICollection的目的是什么?,c#,asp.net,entity-framework,ef-code-first,C#,Asp.net,Entity Framework,Ef Code First,在POCO类中,公共虚拟ICollection产品{get;set;}的用途是什么 public class Category { [ScaffoldColumn(false)] public int CategoryID { get; set; } [Required, StringLength(100), Display(Name = "Name")] public string CategoryName { get;

在POCO类中,
公共虚拟ICollection产品{get;set;}
的用途是什么

public class Category
    {
        [ScaffoldColumn(false)]
        public int CategoryID { get; set; }

        [Required, StringLength(100), Display(Name = "Name")]
        public string CategoryName { get; set; }

        public virtual ICollection<Product> Products { get; set; }


    }
公共类类别
{
[脚手架立柱(假)]
public int CategoryID{get;set;}
[必需,字符串长度(100),显示(Name=“Name”)]
公共字符串CategoryName{get;set;}
公共虚拟ICollection产品{get;set;}
}

类别
相关的
产品
将在第一次访问属性时由Entity Framework延迟加载

有关如何加载相关实体的详细说明,请参见:

延迟加载是指第一次访问引用实体的属性时自动从数据库加载实体或实体集合的过程。使用POCO实体类型时,通过创建派生代理类型的实例,然后重写虚拟属性以添加加载挂钩,可以实现延迟加载


因此,实体框架将从
类别
类派生一个代理类,并重写
产品
属性的getter,以便在第一次访问该属性时加载相关产品。

这被认为是有效/正确的吗?我想我的观点是,我正试图想出有效的方法来利用它,但如果这被认为是一个好的实践,我就不这么认为了。这就是在实体框架中延迟加载相关实体的方法。如果您不想进行延迟加载(可能是出于性能原因,或者仅仅是因为您不喜欢这个概念),那么您应该使用渴望加载或显式加载。更多详细信息,请参阅链接文档。您还可以使用这些属性(称为“导航属性”)快速加载。