代码之家  ›  专栏  ›  技术社区  ›  hkutluay Liam

检查EF6中是否已加载Lazy Load属性

  •  7
  • hkutluay Liam  · 技术社区  · 8 年前

    我在某些操作中通过反射使用类属性,所以当使用DynamicProxy实例时,它会导致加载整个数据库。(700多个类相互关联)。

    是否可以检查是否加载了惰性加载属性?禁用动态代理生成( ProxyCreationEnabled = false )在我的情况下是不可用的。

    Customer oCustomer = context.get(1);
    
    if(oCustomer.Location.HasLoaded)
       do smt..
    
    public class Customer
    {
        public decimal? Id {get; set;}
        public virtual CustomerLocation Location{get; set;}
    }
    
    public class CustomerLocation
    {
        public decimal? Id {get; set;}
        public string Detail {get; set;}
    }
    
    1 回复  |  直到 8 年前
        1
  •  9
  •   Ivan Stoev    8 年前

    看起来你在找 DbReferenceEntry<TEntity, TProperty>.IsLoaded DbReferenceEntry.IsLoaded 属性:

    if (context.Entry(oCustomer).Reference(e => e.Location).IsLoaded)
    

    if (context.Entry(oCustomer).Reference("Location").IsLoaded)
    

    对于集合类型导航属性,只需使用 .Collection 而不是 .Reference .