2017-10-12 38 views
0

我试图找出填充嵌套集合模型的好方法。我在我的视图模型中有以下内容。在视图模型中填充嵌套的ICollection

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 2.0的核心与实体框架核心

+0

'_repoWish.GetAllAsync()。'返回什么?以及如何在结果集中连接Image实体和Wish实体? – Shyju

+0

所以你的愿望不是来自你的数据库中的图像? – Zinov

+0

如果您[使用视图模型],您需要循环或'linq'(https://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc)。你现在的代码有什么问题? – adiga

回答

3

要加载相关的实体,您需要明确地使用Include方法调用当您查询Wishes集合以急切加载Images属性时。

还请确保您拨打await您的async

var wishesWithImages = await yourDbContext.Wishes 
              .Include(g => g.Images) 
              .ToListAsync(); 

变量wishesWithImagesWish对象的集合与图像属性加载。你现在可以使用它来填充你的视图模型。

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;} 
} 

截至今天的集合属性,实体框架的核心是一种重量轻的版本EF6并不会自动继承所有来自EF功能6.延迟加载尚未在EF内核中实现。

+0

因此,当查询' wishWithImages'的愿望是与图像填充?是的,图片有一个WishId – Anonymous

+0

是的。 wishesWithImages是一个愿望与图像属性填充集合。 – Shyju