我有两个对象类
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 加载用户时,我得到的产品列表为空(这是可以的)。
如果我将“虚拟”关键字添加到产品列表中,
public virtual ICollection<Product> Products { get; set; }
当我加载用户时,我也会得到产品列表。
为什么会发生这种情况?我认为“虚拟”关键字用于不加载实体,除非您明确这一点(使用“包含”语句)
我想我全错了
这是错误的
“virtual”关键字用于不加载实体,除非您
显式 this(使用“include”语句)
延迟加载意味着当您第一次访问集合或导航属性时,实体将自动加载,并且这将透明地发生,就好像它们始终与父对象一起加载一样。
当您指定要查询的属性时,使用“include”会按需加载。
的存在virtual
关键字仅与延迟加载相关。virtual
关键字允许实体框架运行时为实体类及其属性创建动态代理,并支持延迟加载。如果没有虚拟,将不支持延迟加载,并且集合属性上会出现空值。
事实上,您在任何情况下都可以使用“include”,但如果没有延迟加载,它是访问集合和导航属性的唯一方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)