在viewmodel中填充嵌套的ICollection

时间:2017-10-12 20:23:02

标签: c# asp.net asp.net-mvc linq

我试图想出一个很好的方法来填充嵌套的集合模型。我的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 实体框架核心

1 个答案:

答案 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核心中尚未实现延迟加载。

相关问题