【问题标题】:Entity EF6 opposite of include与包含相反的实体 EF6
【发布时间】:2016-03-01 11:33:55
【问题描述】:

假设首先使用 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(string path) 来加载医生。但是,如果医生包含一些像图像这样的大字段,我不想加载医生,那么包含的反面是什么?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    这是关于延迟加载的有趣部分,除非您访问该属性,否则您不会加载 Doctor。为了完全确保您不会“意外”延迟加载任何可以加载的内容

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

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

      myContext.Configuration.LazyLoadingEnabled = false;

    我认为选项 2 会更好,因为它让您可以选择何时启用/禁用延迟加载。

    【讨论】:

      【解决方案2】:

      作为docs,您可以在DbContext.OnModelCreating 中使用以下代码:

      modelBuilder.Entity<Patient>()
              .Ignore(p => p.Doctor);
      

      【讨论】:

        【解决方案3】:

        删除 virtual 将延迟加载实体的关键字。然后,当您从数据库中获取 Patient 实体时,它不会加载相关的 Doctor 实体,除非您将其“包含”在查询中。 https://msdn.microsoft.com/en-gb/data/jj574232.aspx

        【讨论】:

        • 或者在查询中使用 AsNoTracking
        猜你喜欢
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 2018-07-13
        • 1970-01-01
        • 2017-12-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多