2016-10-06 37 views
1

假設我有產品在一個數據庫中的表,和ProductImages的表,以及相應的機型,像這樣:的EntityFramework - 獲得產品的列表,每個圖片的名單

public class Product { 
    public int Id {get;set;} 
    public List<ProductImage> Images {get;set;} 
} 

public class ProductImage { 
    public int Id {get; set;} 
    public int ProductId {get;set;} 
    public string Url {get;set;}} 
} 

很顯然,我可以得到像這樣的產品列表:

var query = from p in db.Product select p; 

我怎麼能得到相關的產品列表,使得每個產品型號的圖片屬性已填充與匹配產品編號的圖像?

+0

可能的重複[實體框架不採取數據從相關表](http://stackoverflow.com/questions/39704086/entity-framework-dont-take-data-from-table-which-是相關的) – Gasper

回答

2

使用Include,這確保了相關的實體也被檢索。

var query = from p in db.Product.Include(x => x.Images) select p; 

這假定您映射ProductProductImage之間的關係,不存在沒有被映射,我相信這個假設是有效的它提。

+0

只有當表格有關係時,包含纔會有效 –

+0

我手動創建了表格 - 不確定如何創建映射。 – user888734

+0

@ user888734 - 您可以通過兩種方式添加映射。 1.使用註釋,在其他問題的答案中有一些很好的例子。 2.使用[流利映射](https://msdn.microsoft.com/en-us/data/jj591617.aspx)類。 – Igor

0

一個這樣做的可能的方式是通過使用實體框架數據的註解,它允許你兩個實體之間配置一個一對多的關係,並填充導航屬性:

public class Product 
{ 
    [Key] 
    public int Id { get; set; } 
    public List<ProductImage> Images { get; set; } 
} 

public class ProductImage 
{ 
    [Key] 
    public int Id { get; set; } 
    [Key, ForeignKey("Product")] 
    public int ProductId { get; set; } 
    public string Url { get; set; } 

    public Product Product { get; set; } 
} 
1

這不只是你的ORM模型,你還需要做一些配置。在遷移配置文件中,你可以做到這一點

modelBuilder.Entity<Product>() 
.HasMany<ProductImage>(pI => pI.Product) 

Source

兩者你也可以寫一個.Include(p => p.ProductImages)在任何你正在獲取你的數據。我使用存儲庫的設計模式,所以我把我的資料庫,但曾經你打電話從哪裏得到的數據可以.Include(p => p.ProductImages)

編輯 只注意到你缺少你ProductImages模型東西

public virtual Product Product {get; set;} 

[ForeignKey("Product")] 
public int ProductId {get;set;} 
+1

在上次編輯時,不需要有2種關係映射。單向映射通常是可以接受的,有時甚至是推薦的。這涉及到如何使用模型。 – Igor

相關問題