c# - Entity Framework 代码优先延迟加载

标签 c# entity-framework entity-framework-4 ef-code-first lazy-loading

我有两个对象类

public class User
{
    public Guid Id { get; set; }
    public string Name { get; set; }

    // Navigation
    public ICollection<Product> Products { get; set; }
}

public class Product
{
    public Guid Id { get; set; }

    // Navigation
    public User User { get; set; }
    public Guid User_Id { get; set; }

    public string Name { get; set; }
}

当我使用 dataContext 加载用户时,我得到的产品列表为空(这没问题)。

如果我在产品列表中添加“virtual”关键字,

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

当我加载用户时,我也会获得产品列表。

为什么会这样?我认为“virtual”关键字用于不加载实体,除非你明确指出这一点(使用“Include”语句)

我觉得我错了

最佳答案

这是错误的

"virtual" keyword is used for not loading the entities unless you explicit this (using an "Include" statement)

延迟加载意味着实体将在您第一次访问集合或导航属性时自动加载,并且这将透明地发生,就好像它们总是加载父对象一样。

当您指定要查询的属性时,使用“include”是按需加载。

virtual 关键字的存在只与延迟加载有关。 virtual 关键字允许 Entity Framework 运行时为您的实体类及其属性创建动态代理,并由此支持延迟加载。没有虚拟,将不支持延迟加载,并且您在集合属性上得到 null。

事实上,您可以在任何情况下使用“include”,但如果没有延迟加载,它是访问集合和导航属性的唯一方法。

关于c# - Entity Framework 代码优先延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11469432/

相关文章:

c# - Facebook C# 库

c# - 积分类型推广不一致

c# - 将 JSON 数据发布到 ASP.NET MVC

c# - 如何使用 group by 数据创建 Left Join

entity-framework - 复杂类型的 Entity Framework 列映射

c# - 列出 Entity Framework 中外键指向的实体

c# - 关于Entity Framework Context Lifetime的问题

entity-framework-4 - 从表中获取 3 条随机记录

entity-framework - Entity Framework - 相关的 ICollection 被物化为 HashSet

c# - 在这种情况下我应该使用什么正确的数据类型?