2017-10-27 19 views
0

マイデータベース:あなたが見ることができるように、私は私のProductVmにしたFieldValueのエンティティクラスを使用AutoMapper + ProjectTo - ナビゲーションプロパティを持つエンティティクラスへのマッピング

public class ProductVm 
{ 
    public IEnumerable<FieldValue> FieldValues { get; set; } 
    // other view models 
} 

this.CreateMap<Product, ProductVm>() 
// other properties mappings 
; 

public class Product 
{ 
    public int Id { get; set;} 
    public ICollection<FieldValue> FieldValues { get; set;} 
    // other properties 
} 

public class FieldValue 
{ 
    public int Id { get; set; } 
    public int FieldId { get; set; } 
    public int ProductId { get; set; } 
    public Field Field { get; set; } 
    public Product Product { get; set;} 
} 

public class Field 
{ 
    public int Id { get; set;} 
    public string Name { get; set;} 
} 

マイビューモデルとマッピングビューモデル。

私のデータベースクエリは非常に簡単です:私は、データベースとプロジェクトの製品を照会すると

var productViewModel = context.Products.ProjectTo<ProductVm>().First(p => p.Id == productId); 

は - > ProductVm私はフィールドのセットなしたFieldValueコレクションを見つけます。

ビューモデルにマップする必要がある他のプロパティがあるので、私はProjectToマッピングを使用する必要があります。 FieldValueだけがそれにとどまる必要があります。

AutoMapperに返されたデータにこのフィールドを含める方法を教えてください。 1つの制限 - FieldValueクラスオブジェクトを返す必要があります。返されたクラスを他のVMに変更することはできません。

+0

データベースクエリを投稿すると便利です –

+0

私はクエリを追加しました - それは本当に簡単です。手掛かりは、AutoMapper + ProjectToを追加のナビゲーションプロパティを含めて接続する方法です。 –

答えて

0

私はあなたのデータベースからクラスであるオブジェクトIEnumerable<FieldValue>があるクラスProductVmのため、問題は、あなたのクエリにすることができ、あなたのマッピングは、例えばFieldVmまたはFieldValueVmに持っていないことを考える:

this.CreateMap<Field, FieldVm>(); 
this.CreateMap<FieldValue, FieldValueVm>(); 
this.CreateMap<Product, ProductVm>(); 

、たFieldValueとフィールドのためのそれのようなものが含まれている場合しかし、私は、マッピングは問題ではないと思われる、あなたがあなたのクエリに移動して確認する必要があります。

var yourQuery = _context.Product 
    .Include(i => i.FieldValue) 
    .Include(i => i.FieldValue.Select(s => s.Field)) 
    .ToList(); 

を私はよく分からないことができますが、それである。

+0

私はProjectToを使用する必要があります。このマッピングは、より大きな機能の一部であり、データベースクエリで処理する他のマッピングがあります。私は意図的に記述でそれをスキップしましたが、あなたの投稿の後に私は間違いであることがわかります。 –

+0

私はいくつかの詳細を追加しました。私は現在、私はより正確ですが願っています。 –

関連する問題