2016-10-06 3 views
1

한다고 가정 내가 지금처럼 해당 모델 데이터베이스에 제품의 테이블, 그리고 ProductImages의 테이블을 가지고 제품의 목록, 이미지 목록과 각을 얻을 그래서 같은 제품의 목록 :EntityFramework

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

가 어떻게 제품의 목록을 등 각 ProductModel의 이미지 속성은 제품 ID와 일치하는 이미지로 채워되었음을 수 있을까?

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

[Entity Framework의 가능한 복제본은 관련된 테이블의 데이터를 가져 가지 않습니다.] (http://stackoverflow.com/questions/39704086/entity-framework-dont-take-data-from-table-which- 관련 있음) – Gasper

답변

2

사용 Include, 이것은 보장 :이 일을 가능한 방법의

+0

테이블이 관계가있는 경우에만 포함됩니다. –

+0

수동으로 테이블을 만들었습니다. 매핑을 만드는 방법을 모릅니다. – user888734

+0

@ user888734 - 두 가지 방법 중 하나를 추가 할 수 있습니다. 1. 주석을 사용하십시오. 귀하의 질문에 대한 다른 답변에는 좋은 예가 있습니다. 2. [유창한 매핑] (https://msdn.microsoft.com/en-us/data/jj591617.aspx) 클래스를 사용하십시오. – Igor

0

하나는 탐색 속성을 두 엔티티 사이에 일대 다 관계를 구성하고 채울 수있는 엔티티 프레임 워크 데이터 주석을 사용하는 것입니다 관련 엔티티도 검색됩니다.

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

이 당신이하지 내가이 가정이 유효 생각 매핑되는 그것의 언급이없는 ProductProductImage 사이 같은 관계를 매핑 된 것으로 가정합니다.

1

ORM 모델뿐만 아니라 구성도 필요합니다. 마이그레이션 구성 파일에서이

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

당신이 당신의 데이터를 가져 오는 있습니다 어느 곳 당신은 또한 .Include(p => p.ProductImages)를 작성할 수 Source

에서 촬영 할 수 있습니다. 나는 저장소 디자인 패턴을 사용, 그래서 난 내 저장소에 있음을 넣어,하지만 당신은 당신이 할 수있는 데이터를 얻기 위해 전화하는거야 어느 곳 .Include(p => p.ProductImages)

편집 당신이 당신의 ProductImages 모델에서 뭔가를 놓치고있어주의

public virtual Product Product {get; set;} 

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

마지막 편집에서 관계의 양방향 매핑이 필요하지 않습니다. 편도 매핑은 대개 수용 가능하며 때로는 권장되는 경우도 있습니다. 그것은 모델이 어떻게 사용되는지에 달려 있습니다. – Igor