2016-09-11 1 views
1

ich folgende ModelleAutoMapper mit Child-Liste Property Mapping Ausgabe

Modelle

public class Dish 
{ 
    [Required] 
    public Int64 ID { get; set; } 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public string Description { get; set; } 
    [Required] 
    public double Price { get; set; } 
    [Required] 
    public DateTime From { get; set; } 
    [Required] 
    public DateTime To { get; set; } 
    [Required] 
    public bool IsAvailable { get; set; } 
    [Required] 
    public string MealImage { get; set; } 
    [Required] 
    public List<Ingredients> Ingredients { get; set; } 
} 


public class Ingredients 
{ 
    [Required] 
    public Int64 ID { get; set; } 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public int Quantity { get; set; } 
    [Required] 
    public Int64 Dish_ID { get; set; } 
    [ForeignKey("Dish_ID")] 
    public virtual Dish Dish { get; set; } 
} 

Nach bin mit der Ansichtsmodell für sie

public class DishViewModel 
{ 
    public Int64 ID { get; set; } 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public string Description { get; set; } 
    [Required] 
    public double Price { get; set; } 
    [Required] 
    public DateTime From { get; set; } 
    [Required] 
    public DateTime To { get; set; } 
    public bool IsAvailable { get; set; } 
    public string MealImage { get; set; } 
    [Required] 
    public string IngredientsData { get; set; } 

    public List<IngredientsViewModel> Ingredients { get; set; } 
} 

public class IngredientsViewModel 
{ 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public int Quantity { get; set; } 
    [Required] 
    public Int64 Dish_ID { get; set; } 
} 

I AutoMapper bin mit für die Zuordnung zwischen ihnen. Nach dem Code ist, dass ich die Schale zu DishViewModel

public DishViewModel Create(Dish dish) 
    { 
     Mapper.Initialize(cfg => cfg.CreateMap<Dish, DishViewModel>() 
     .ForMember(s => s.Ingredients, c => c.MapFrom(m => m.Ingredients)) 
     ); 
     DishViewModel dishViewModel = Mapper.Map<DishViewModel>(dish); 
     return dishViewModel; 
    } 

ich in obigen Verfahren folgende Störung erhalten auf Karte bin mit Error in Mapping

Kann mich jemand bitte leite, was ich falsch in obigem Prozess tue.

Dank

Antwort

5

Sie haben eine Mapping-Konfiguration für Ingredients, ähnlich den Mapping für Dish und DishViewModel

zu erstellen, wie Sie in der Exception zu sehen ist, sagt Karte Konfiguration fehlen.

die Config auf die zu dieser Mapper.Initialize

Mapper.Initialize(

    // Here you are only adding one config. 

cfg => cfg.CreateMap<Dish, DishViewModel>() 
     .ForMember(s => s.Ingredients, c => c.MapFrom(m => m.Ingredients)) 

     ); 

ändern hinzufügen:

Mapper.Initialize(cfg => 
    { 
      cfg.CreateMap<Dish, DishViewModel>() 
       .ForMember(s => s.Ingredients, c => c.MapFrom(m => m.Ingredients)); 

      cfg.CreateMap<Ingredients, IngredientsViewModel>(); 

    }); 

Auch brauchen Sie nicht die folgenden:

.ForMember(s => s.Ingredients, c => c.MapFrom(m => m.Ingredients)); 

als Namen der Eigenschaften sind gleich, AutoMapper wird automatisch die Eigenschaften zuordnen.

so können Sie verwenden:

Mapper.Initialize(cfg => 
    { 
      cfg.CreateMap<Dish, DishViewModel>(); 

      cfg.CreateMap<Ingredients, IngredientsViewModel>(); 

    }); 
+0

Dank Ihrer Antwort perfekt funktioniert. –