2016-11-18 73 views
1

我在这里有一个查询,它提取单个实体对象并且只有一个满足特定条件的嵌套实体,但是我在执行时收到一个错误。实体框架在使用.include获取嵌套对象时抛出错误

下面是查询

Profile profile = dbContext.Profiles.Where(i => i.ApplicationUserGuid == guiId) 
       .Include(i => i.ProfileImages.Where(k => k.IsMainImage == true)).First(); 

这里是异常错误消息

包含路径表达式必须引用的类型所定义的导航属性。对于参考导航属性使用虚线路径,对集合导航属性使用Select运算符。 参数名称:路径

我也试图与另一个。首先()运行它,但还是同样的错误消息

Profile profile = dbContext.Profiles.Where(i => i.ApplicationUserGuid == guiId) 
       .Include(i => i.ProfileImages.Where(k => k.IsMainImage == true).First()).First(); 

回答

2

,无法筛选的Include内相关的实体,您要需要与期望的结果对项目的查询,或者使用explicit loading

Profile profile = dbContext.Profiles 
          .Where(i => i.ApplicationUserGuid == guiId) 
          .First(); 
dbContext.Entry(profile) //Explicit Loading 
     .Collection(b => b.ProfileImages) 
     .Query() 
     .Where(k => k.IsMainImage == true).Take(1) 
     .Load(); 

如果你做的投影也将只有一个往返到您的数据库,如果你使用expli加载它将是两个。

仅供参考,如果您想投影结果,则投影为匿名类型或DTO。更多信息here

+0

我遵循你的显式加载示例及其工作,但它返回所有嵌套的实体,而不仅仅是符合where条件的实体! – user1186050

+0

我编辑了我的答案,'采取'方法应该修复 – octavioccl

+0

我还有点不确定为什么所有的图像都会在除了1满足where条件的所有图像时被返回?那么where条件的目的是什么?如果它不工作?我尝试了Take(1),它仍然返回所有的图像! – user1186050

相关问题