我试图想出一个很好的方法来填充嵌套的集合模型。我的viewmodel中有以下内容。
public class ListViewModel
{
public ICollection<Wish> Wishes { get; set; }
}
愿望模型如下:
public class Wish
{
public ICollection<Image> Images { get; set; }
}
现在,在我的控制器中,我想填充 ListViewModel ,并希望用相应的图像填充每个愿望。到目前为止我所拥有的:
public IActionResult Index()
{
ICollection wishes = _repoWish.GetAllAsync().Result;
ICollection images = _repoImage.GetAllAsync().Result;
var model = new ListViewModel
{
Wishes = wishes
};
return View(model);
}
我知道我可以做很多foreach语句,但我想利用LINQ用相应的图像填充每个愿望。
**我确实有一个通用的存储库类,这使我能够以与愿望相同的方式检索所有图像。
***将存储库视为上下文。 因此,而不是_repoWish和_repoImage,它的wishContext和imageContext
我正在使用 ASP.NET Core 2.0 与实体框架核心
答案 0 :(得分:3)
要加载相关实体,在查询Include
集合以急切加载Wishes
属性时,需要显式使用Images
方法调用。
另请确保await
async
来电{。}}。
var wishesWithImages = await yourDbContext.Wishes
.Include(g => g.Images)
.ToListAsync();
变量wishesWithImages
将是加载了Images属性的Wish
个对象的集合。您现在可以使用它来填充视图模型。
var vm = new ListViewModel { Wishes = wishesWithImages };
假设您的Wish
实体具有类型为Images
public class Wish
{
public int Id { set;get;}
public ICollection<Image> Images { set;get;}
}
public class Image
{
public int Id { set;get;}
public int WishId { set;get;}
public virtual Image Image{ set;get;}
}
截至今天,Entity框架核心是EF6的轻量级版本,并不会自动继承EF 6的所有功能。在EF核心中尚未实现延迟加载。