作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 EF4 中,我的对象图很小,数据量也很小。因此,对于查询,我想急切地加载所有相关数据。是否有任何单一的方法调用可以完成这项工作,例如 "IQueryable.IncludeEverything()"
,而不是调用 Include()
反复使用硬编码的属性名称?
最佳答案
没有什么是开箱即用的,但您可以使用 MetadataWorkspace 来实现它:
public static IQueryable<T> IncludeEverything<T>(this IQueryable<T> query, ObjectContext context)
where T : class
{
var ospaceEntityType = context.MetadataWorkspace.GetItem<EntityType>(
typeof(T).FullName, DataSpace.OSpace);
var cspaceEntityType = context.MetadataWorkspace.GetEdmSpaceType(ospaceEntityType);
var includedTypes = new HashSet<EdmType>();
includedTypes.Add(cspaceEntityType);
return IncludeEverything(query, cspaceEntityType as EntityType, "", includedTypes);
}
private static IQueryable<T> IncludeEverything<T>(IQueryable<T> query,
EntityType entity,
string path,
HashSet<EdmType> includedTypes)
where T : class
{
foreach (var navigationProperty in entity.NavigationProperties)
{
var propertyEdmType = navigationProperty.TypeUsage.EdmType;
if (includedTypes.Contains(propertyEdmType))
{
continue;
}
includedTypes.Add(propertyEdmType);
var propertyCollectionType = propertyEdmType as CollectionType;
EntityType propertyEntityType;
if (propertyCollectionType != null)
{
propertyEntityType = propertyCollectionType.TypeUsage.EdmType as EntityType;
} else
{
propertyEntityType = propertyEdmType as EntityType;
}
var propertyPath = string.IsNullOrEmpty(path) ? "" : path + ".";
propertyPath += navigationProperty.Name;
query = query.Include(propertyPath);
query = IncludeEverything(query, propertyEntityType, propertyPath, includedTypes);
}
return query;
}
关于entity-framework - Entity Framework 急于加载/"IncludeEverything()"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12486741/
在 EF4 中,我的对象图很小,数据量也很小。因此,对于查询,我想急切地加载所有相关数据。是否有任何单一的方法调用可以完成这项工作,例如 "IQueryable.IncludeEverything()
我是一名优秀的程序员,十分优秀!