Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 4 急切地首先加载带有EF代码的对象图_Entity Framework 4_Ef Code First - Fatal编程技术网

Entity framework 4 急切地首先加载带有EF代码的对象图

Entity framework 4 急切地首先加载带有EF代码的对象图,entity-framework-4,ef-code-first,Entity Framework 4,Ef Code First,我有一个相当深的对象图,并希望急切地加载整个图形 我知道我可以使用.Include()急切地加载特定的导航属性 然而,这看起来很脆弱(如果我添加了导航属性,我还必须添加一个额外的.Include),并且需要(在我的例子中)相当多的.Include()语句 是否有方法指示EF急切地加载整个对象图?您必须手动包含要急切加载的每个导航属性。EF不提供任何内置方式来包含所有 但是,这似乎很脆弱(如果我添加导航属性,我必须 还要添加一个额外的.Include)并需要(在我的例子中)很多 .Include(

我有一个相当深的对象图,并希望急切地加载整个图形

我知道我可以使用.Include()急切地加载特定的导航属性

然而,这看起来很脆弱(如果我添加了导航属性,我还必须添加一个额外的.Include),并且需要(在我的例子中)相当多的.Include()语句


是否有方法指示EF急切地加载整个对象图?

您必须手动包含要急切加载的每个导航属性。EF不提供任何内置方式来包含所有

但是,这似乎很脆弱(如果我添加导航属性,我必须 还要添加一个额外的.Include)并需要(在我的例子中)很多 .Include()语句

它比任何东西都要脆弱。这种特性只会导致太多问题,因为在许多情况下,它会意外地加载导航属性

作为一种解决方法,您可以创建一些自定义扩展方法,该方法将探索实体类型的EF元数据,并为图形中的每个导航属性添加
Include
调用

在EF中有许多改进的方法。您可以浏览它们,向上投票您认为有价值的功能或提出一个新的功能

然而,这看起来很脆弱(如果我添加了导航属性,我还必须添加一个额外的.Include),并且需要(在我的例子中)相当多的.Include()语句

为了将加载对象图的所有代码保存在一个地方,我创建了一个扩展方法,可以在代码中的任何地方使用

static public IQueryable<My> IncludeAll(this DbSet<My> parent)
{
    var include = parent
        .Include(p => p.CollA)
        .Include(p => p.CollB)
        .Include(p => p.CollC)
        .Include(p => p.CollD)
        .Include(p => p.CollE)
        .Include(p => p.CollF)
        .Include(p => p.Etc);

    return include;
}

这仍然是加载整个对象图的最佳方式吗?这些建议中的任何一项是否已见效?
var query = ctx.Mys.IncludeAll().Where(...);