zoukankan      html  css  js  c++  java
  • EFCore显示加载模式下,自动包含导航属性(只包含第一层的导航属性)的方法

    在EntityFramework中,其默认加载方式是懒加载,所有查询都会为导航属性创建一个动态代理,这是导致ef性能低的一个原因。
    在EFCore中,官方将其默认的加载方式改为了显示加载,即导航属性需要Include才会加载。而大部分时候,在调用Single方法或其他的查询单个数据的时候,我们需要拿到他的导航属性,而如果每次都Include的话就显得很麻烦。
    这里我给大家介绍一种自动包含所有导航属性的方法。

     private IQueryable<T> IncludeNavProperty()
            {
                var query = _Db.Set<T>().AsQueryable();
                foreach (var nav in _Db.Model.FindEntityType(typeof(T)).GetNavigations())
                {
                    query = query.Include(CreateNav(nav));
                }
                return query;
            }
            public Expression<Func<T, object>> CreateNav(INavigation nav)
            {
                var lambdaParam = Expression.Parameter(typeof(T));
                var body = Expression.PropertyOrField(lambdaParam, nav.Name);
                return Expression.Lambda<Func<T, object>>(body, lambdaParam);
            }
    

    我们可以通过_Db.Model.FindEntityType(typeof(T)).GetNavigations()拿到所有的导航属性,然后创建表达式树,来包含导航属性中的导航属性,但这种方式只能获取到一层导航属性。
    获取导航属性的导航属性的方法我暂时还没想到一个完美的解决方案,如果哪位大佬又更好的建议,请赐教

  • 相关阅读:
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale
    CodeForces 785B Anton and Classes
    CodeForces 785A Anton and Polyhedrons
    爱奇艺全国高校算法大赛初赛C
    爱奇艺全国高校算法大赛初赛B
    爱奇艺全国高校算法大赛初赛A
    EOJ 3265 七巧板
    EOJ 3256 拼音魔法
    EOJ 3262 黑心啤酒厂
  • 原文地址:https://www.cnblogs.com/qwfy-y/p/13132346.html
Copyright © 2011-2022 走看看