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的信息