CodeFirst中的多级包含 - EntityFrameWork

Nur*_*MAZ 25 entity-framework entity-framework-ctp5

这是工作代码;

IQueryable<Product> productQuery = ctx.Set<Product>().Where(p => p.Id == id).(Include"Contexts.AdditionalProperties.Field");
Run Code Online (Sandbox Code Playgroud)

但是你知道如果我们在"Contexts.AdditionalProperties.Field"中的字符串语句中出错,它就不会产生编译时错误

我想写下面的代码;

IQueryable<Product> productQuery = ctx.Set<Product>().Where(p => p.Id == id).Include(p => p.Contexts);
Run Code Online (Sandbox Code Playgroud)

但上面的声明无法给出定义AdditionalProperties和Field的机会.

我们应该做什么?

我想编写多个包含用于构建查询的包含.

谢谢.

Mor*_*avi 43

如果AdditionalProperties是对另一个对象的单个引用:

using System.Data.Entity;
...
IQueryable<Product> productQuery = ctx.Set<Product>()
        .Include(p => p.Contexts.AdditionalProperties.Field)
        .Where(p => p.Id == id);
Run Code Online (Sandbox Code Playgroud)


如果AdditionalProperties是一个集合,那么您可以使用Select方法:

IQueryable<Product> productQuery = ctx.Set<Product>()
        .Include(p => p.Contexts.AdditionalProperties.Select(a => a.Field))
        .Where(p => p.Id == id);
Run Code Online (Sandbox Code Playgroud)

不要忘记在类文件中导入System.Data.Entity命名空间!

  • 你不能.Include不允许在导航属性上进行条件加载.为此,您需要消除Include并通过带有匿名类型的*Filtered Projection*加载已过滤的导航属性.看看这个帖子:http://stackoverflow.com/questions/3718400/conditional-eager-loading/3718457#3718457 (3认同)