实体框架相关的实体在没有显式Load或Include调用的情况下加载
本文关键字:实体 加载 Load Include 调用 情况下 框架 | 更新日期: 2023-09-27 18:30:10
我有一个如下生成的实体模型:
public partial class Entity
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Entity()
{
this.Comments = new HashSet<Comment>();
this.Fields = new HashSet<FieldEntity>();
}
public int ID { get; set; }
public string Name { get; set; }
public int AssigneeID { get; set; }
public string Description { get; set; }
public System.DateTime Created { get; set; }
public int CreatedBy { get; set; }
public System.DateTime LastEdited { get; set; }
public int LastEditBy { get; set; }
public bool Deleted { get; set; }
public Nullable<System.DateTime> DeletedDate { get; set; }
public virtual UserEntity Assignee { get; set; }
public virtual UserEntity CreatedByUser { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Comment> Comments { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<FieldEntity> Fields { get; set; }
public virtual UserEntity LastEditByUser { get; set; }
}
当我使用EF LinqToSql获取此实体时,由于某种原因,即使我没有使用此处指定的Include()
或Load()
,也会填充Comments
和Fields
的列表。
这是我使用的一个示例查询:
var entities = ctx.MyEntities.Single(x => x.ID == 1);
我认为默认行为是懒惰地加载相关实体,所以我试图弄清楚我的查询或模型是否有问题。
值得一提的是,我确实在我的解决方案中搜索了LazyLoadingEnabled
,它应该被启用:
//from MyDBModel.edmx
<EntityContainer Name="MyEntities" annotation:LazyLoadingEnabled="true">
...
默认情况下,在EF中启用延迟加载。如果你想禁用它,你可以检查与同一主题相关的另一个问题的答案。
此外,您还可以使用SQL Server Profiler工具确认代码是否正在执行延迟加载。有关如何执行此操作的详细信息,请查看此链接。