首先使用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。但如果医生包含一些像图像这样的大字段,如果我不想加载医生那会包含哪些内容?
谢谢!
答案 0 :(得分:1)
这是关于延迟加载的有趣部分,除非您访问该属性,否则您将无法加载Doctor
。要完全确定你不会意外地'懒惰加载你能做的任何事情
从您永远不想延迟加载的属性中一起删除virtual
关键字。
创建上下文时,请为DbContext
的该实例禁用延迟加载:
myContext.Configuration.LazyLoadingEnabled = false;
我认为选项号2是首选,因为这样可以选择何时启用/禁用延迟加载。
答案 1 :(得分:0)
删除Lazy加载实体的 虚拟 关键字。然后,当您从数据库中获取Patient实体时,它将不会加载相关的Doctor实体,除非您在查询中“包含”它。 https://msdn.microsoft.com/en-gb/data/jj574232.aspx
答案 2 :(得分:0)
作为docs,您可以在DbContext.OnModelCreating
中使用以下代码:
modelBuilder.Entity<Patient>()
.Ignore(p => p.Doctor);