是否可以使用dbcontext包含Include()?

问题描述 投票:1回答:2

在急切加载中查询DbContext时,需要Include("Navigation")才能填充导航属性。但是在某些情况下,我想简单地为实体设置Include all导航属性。有没有方法可以做到这一点?我假设您可以进行反思,但我希望避免这种情况。

我知道:

var entity = db.Table.Include("Navigation1").Include("Navigation2").First();

我想要的是:

var entity = db.Table.IncludeAll().First(); 
c# asp.net-mvc entity-framework dbcontext eager-loading
2个回答
4
投票

没有那没有。实体框架intentally使您明确想要加载的内容,因为添加联接会使查询变得更重,更慢。这是为了保护您免受自己的伤害。如果需要连接,很好,但是至少,当您明确指定它们时,您将确切知道要产生的连接数以及原因。


0
投票

一个简单的选择是使用反射来检查虚拟属性。

public static IQueryable<T> IncludeAlla<T>(this IQueryable<T> queryable) where T : class
{
    var type = typeof(T);
    var properties = type.GetProperties();
    foreach (var property in properties)
    {
        var isVirtual = property.GetGetMethod().IsVirtual;
        if (isVirtual)
        {
            queryable = queryable.Include(property.Name);
        }
    }
    return queryable;
}
© www.soinside.com 2019 - 2024. All rights reserved.