C# 如何在实体框架中动态加载所有引用的实体 环境足迹6 我有以下的POCO
_ 现在,当我想要急切地加载所有引用的实体时。为此,我必须:C# 如何在实体框架中动态加载所有引用的实体 环境足迹6 我有以下的POCO,c#,entity-framework,C#,Entity Framework,_ 现在,当我想要急切地加载所有引用的实体时。为此,我必须: public IQueryable<StructureDivisionEntity> GetAllWithInclude() { return GetAll() .Include(e => e.Structure) .Include(e => e.ParentStructureDivision.Structure) .Include(e
public IQueryable<StructureDivisionEntity> GetAllWithInclude()
{
return GetAll()
.Include(e => e.Structure)
.Include(e => e.ParentStructureDivision.Structure)
.Include(e => e.Structure.Site.Client);
}
我想知道是否有一种动态的方法可以做到这一点,而不必显式地执行.IncludeStructure等操作,大致如下:
MyEntity.IncludealReferenced其中IncludealReferenced使用反射或类似来遍历MyEntity并执行所有包含操作
更新:查询复杂图的替代方法
您不能这样做,但是您可以使用extensionmethod来获取所有。 这可能是一个疯狂的想法,但您可以创建一个通用扩展方法来处理所有类型,从而使代码更加干净 例如,如有必要,可以使用factory模式对此进行扩展:
public static IQueryable<T> IncludeAll<T>(this IQueryable<T> query)
{
if (typeof(T) == typeof(StructureDivisionEntity))
{
return GetAllWithInclude(query);
}
throw new NotImplementedException("IncludeAll not implemented for type {0}",typeof(T).FullName);
}
private static IQueryable<StructureDivisionEntity> GetAllWithInclude<StructureDivisionEntity> (IQueryable<StructureDivisionEntity> query)
{
return query.Include(e => e.Structure)
.Include(e => e.ParentStructureDivision.Structure)
.Include(e => e.Structure.Site.Client);
}
看,这是一个有趣的想法。遗憾的是,我仍然需要硬编码我想做的Include调用。
public static IQueryable<T> IncludeAll<T>(this IQueryable<T> query)
{
if (typeof(T) == typeof(StructureDivisionEntity))
{
return GetAllWithInclude(query);
}
throw new NotImplementedException("IncludeAll not implemented for type {0}",typeof(T).FullName);
}
private static IQueryable<StructureDivisionEntity> GetAllWithInclude<StructureDivisionEntity> (IQueryable<StructureDivisionEntity> query)
{
return query.Include(e => e.Structure)
.Include(e => e.ParentStructureDivision.Structure)
.Include(e => e.Structure.Site.Client);
}