延迟加载
** 默认情况下启用延迟加载。通过创建派生代理类和覆盖虚拟导航 proeprties 来实现延迟加载。第一次访问属性时会发生延迟加载。
int companyId = ...;
Company company = context.Companies
.First(m => m.Id == companyId);
Person founder = company.Founder; // Founder is loaded
foreach (Address address in company.Addresses)
{
// Address details are loaded one by one.
}
要关闭特定导航属性的 Lazy 加载,只需从属性声明中删除 virtual 关键字:
public Person Founder { get; set; } // "virtual" keyword has been removed
如果要完全关闭延迟加载,则必须更改配置,例如,在 Context 构造函数中 :
public class MyContext : DbContext
{
public MyContext(): base("Name=ConnectionString")
{
this.Configuration.LazyLoadingEnabled = false;
}
}
注意: 如果你正在使用序列化,请记得关闭延迟加载。因为序列化程序访问每个属性,所以你将从数据库加载所有属性。此外,你可以在导航属性之间进行循环。