C# 急切的装载。忽略自引用实体

C# 急切的装载。忽略自引用实体,c#,entity-framework,lazy-loading,eager-loading,C#,Entity Framework,Lazy Loading,Eager Loading,我在应用程序中关闭了延迟加载: this.Configuration.LazyLoadingEnabled = false; 我的自参考实体类型为: public partial class Okved : BaseEntity { public Okved() { this.ChildOkveds = new HashSet<Okved>(); this.TitleOkved = new Hash

我在应用程序中关闭了延迟加载:

this.Configuration.LazyLoadingEnabled = false;
我的自参考实体类型为:

 public partial class Okved : BaseEntity
 {
        public Okved()
        {
            this.ChildOkveds = new HashSet<Okved>();
            this.TitleOkved = new HashSet<TitleOkved>();
        }

        public Nullable<int> OkvedId { get; set; }
        public string Code { get; set; }
        public string Name { get; set; }

        public virtual ICollection<Okved> ChildOkveds { get; set; }
        public virtual Okved ParentOkved { get; set; }
        public virtual ICollection<TitleOkved> TitleOkved { get; set; }
  }
public分部类Okved:BaseEntity
{
公共图书馆
{
this.ChildOkveds=新HashSet();
this.TitleOkved=new HashSet();
}
公共可为空的OkvedId{get;set;}
公共字符串代码{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection子对象视频{get;set;}
公共虚拟Okved ParentOkved{get;set;}
公共虚拟ICollection TitleOkved{get;set;}
}
但在我的Dao方法中,它返回所有实体,每个实体都有子实体,但它不应该…:

 public virtual List<T> All(Expression<Func<T, object>> include = null)
 {
        List<T> result;
        var query = DbConnection.BaseEntitySet.OfType<T>();

        if (include != null)
            query = query.Include(include);

        result = query.ToList();

        return result;
  }
公共虚拟列表全部(表达式include=null)
{
列出结果;
var query=DbConnection.BaseEntitySet.OfType();
如果(包括!=null)
query=query.Include(包含);
结果=query.ToList();
返回结果;
}

那么,如何在查询中禁用自引用实体? 在其他情况下(当实体获得对其他类型实体的引用时),即时加载工作正常。

使用此语句

DbConnection.BaseEntitySet.OfType<T>();
DbConnection.BaseEntitySet.OfType();
您正在检索特定类型的所有实体,例如
Okved

由于
Okved
具有相同类型的导航属性或此类型的集合,因此所有这些属性也将被初始化,因为这是上下文跟踪加载实体的方式。具体化某个实体后,将更新上下文中加载的所有其他实体,以便在它们指向新创建的实体时设置它们的导航属性

要解决这个问题,请调整Dao方法,使其不包含您不希望包含的属性信息。请注意,如果您将entity属性设置为null,它将被视为实体更新,并且在调用实体的SaveChanges时将被处理

另一个选项是使用
MergeOption.NoTracking
选项查询实体


非常感谢。var query=DbConnection.BaseEntitySet.AsNoTracking().OfType();对我有用。但我不明白什么叫“不跟踪做”)。将阅读有关EF的书籍。阅读我提供的链接中有关MergeOption.NoTracking的信息