实体EF6包含对面
问题描述:
说先使用EF6代码。假设我们有一个简单的两表关系。 如果患者有一位医生相关。实体EF6包含对面
class Patient
{
[Key]
public int id { get; set; }
public string Name { get; set; }
[ForeignKey("Doctor")]
public int DoctorId { get; set; }
public virtual MedicalPersonel Doctor { get; set; }
}
class MedicalPersonel
{
[Key]
public int id { get; set; }
public string Name { get; set; }
}
当我加载病人时,有一个函数Include(字符串路径)来加载Doctor。但是如果医生包含像图像这样的大领域,如果我不想加载医生,那么包括什么会是相反的?
谢谢!
答
删除虚拟将延迟加载实体的关键字。然后,当您从数据库中获取Patient实体时,它不会加载相关的Doctor实体,除非您将其包含在查询中。 https://msdn.microsoft.com/en-gb/data/jj574232.aspx
答
这是关于延迟加载的有趣部分,除非您访问属性,否则不会加载Doctor
。为了完全确保你不“意外”懒加载任何你能
一起从你永远不希望延迟加载的属性中删除
virtual
关键字。-
当你创建你的背景下,禁用延迟加载为
DbContext
的该实例:myContext.Configuration.LazyLoadingEnabled = false;
我想,说的是你的选择,当启用选项2号将是首选/禁用延迟加载。
或者在查询中使用AsNoTracking – tede24