实体EF6对面包括

时间:2016-03-01 11:33:56

标签: c# entity-framework ef-code-first entity-framework-6

首先使用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。但如果医生包含一些像图像这样的大字段,如果我不想加载医生那会包含哪些内容?

谢谢!

3 个答案:

答案 0 :(得分:1)

这是关于延迟加载的有趣部分,除非您访问该属性,否则您将无法加载Doctor。要完全确定你不会意外地'懒惰加载你能做的任何事情

  1. 从您永远不想延迟加载的属性中一起删除virtual关键字。

  2. 创建上下文时,请为DbContext的该实例禁用延迟加载:

    myContext.Configuration.LazyLoadingEnabled = false;

  3. 我认为选项号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);