在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(nav.Name);
}
return query;
}
我们可以通过_Db.Model.FindEntityType(typeof(T)).GetNavigations()拿到所有的导航属性,然后包含进去,但这种方式只能拿到第一层导航属性,无法获取导航属性中的导航属性,即ThenInlcude()。
原文:https://www.cnblogs.com/qwfy-y/p/13132346.html