加载实体框架相关实体时没有显式加载或包含调用

时间:2016-01-14 01:15:21

标签: c# entity-framework

我有一个如下生成的实体模型:

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获取此实体时,由于某种原因,即使我不使用CommentsFields,也会填充Include()Load()的列表如指定here

这是我使用的示例查询:

var entities = ctx.MyEntities.Single(x => x.ID == 1);

我认为默认行为是懒惰加载相关实体,所以我试图弄清楚我的查询或模型是否有问题。

为了它的价值,我确实搜索了LazyLoadingEnabled的解决方案并且应该启用它:

//from MyDBModel.edmx
<EntityContainer Name="MyEntities" annotation:LazyLoadingEnabled="true">
...

1 个答案:

答案 0 :(得分:0)

在EF中默认启用延迟加载。如果要禁用它,可以检查与此相关主题相关的此another question的答案。

此外,您可以使用SQL Server Profiler工具确认您的代码是否正在执行延迟加载。请查看此link以获取有关如何执行此操作的详细信息。