EntityFramework - 获取产品列表,每个产品都包含图像列表

时间:2016-10-06 14:26:32

标签: c# entity-framework

假设我在数据库中有一个Products表,还有一个ProductImages表,其中包含相应的模型:

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;

我如何获得产品列表,以便每个ProductModel的Images属性都填充了匹配ProductId的图像?

3 个答案:

答案 0 :(得分:2)

使用Include,这可确保同时检索相关实体。

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

这假设你已经映射了ProductProductImage之间的关系,因为没有提到它没有被映射我相信这个假设是有效的。

答案 1 :(得分: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;}

答案 2 :(得分:0)

执行此操作的一种可能方法是使用Entity Framework数据注释,该注释允许您配置两个实体之间的一对多关系并填充导航属性:

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