2016-10-06 1 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; 

がどのように製品のリストを取得し、各ProductModelのImagesプロパティは、のProductIdが一致する画像が取り込まれたことだろうか?これはことを保証

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 - 2つの方法のいずれかをマッピングに追加できます。 1.注釈を使用して、あなたの質問に対する他の答えには、その良い例がいくつかあります。 2. [Fluent mapping](https://msdn.microsoft.com/en-us/data/jj591617.aspx)クラスを使用します。 – Igor

0

これを行うことの可能な方法の一つは、あなたが2つのエンティティ間の1対多の関係を設定し、ナビゲーションプロパティを移入することを可能にするEntity Frameworkのデータ注釈を使用することです関連するエンティティも検索されます。

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

これは、あなたがProductProductImageの間、私はこの仮定が有効であると信じてマッピングされていないことの言及がないような関係をマッピングされていることを前提としています。

1

あなたのORMモデルだけでなく、いくつかの設定を行う必要があります。お使いの移行構成ファイルでは、あなたがSource

から撮影この

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

を行うことができますまた、これまで、あなたのデータをフェッチしている.Include(p => p.ProductImages)を書くことができます。私は、リポジトリのデザインパターンを使用するので、私は私のリポジトリであることを入れていますが、データを取得するために呼んでいる今まであなたは.Include(p => p.ProductImages)

EDIT はちょうどあなたがあなたのProductImagesモデル

で何かが欠けている気づいたことができる場所
public virtual Product Product {get; set;} 

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

最後の編集では、リレーションシップの2方向マッピングを持つ必要はありません。一方的なマッピングは通常許容され、時には推奨されることもあります。モデルがどのように使われているかがわかります。 – Igor