2017-10-12 40 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