【问题标题】:Automapper with Child List Property Mapping Issue带有子列表属性映射问题的 Automapper
【发布时间】:2017-01-19 03:52:07
【问题描述】:

我有以下模型

模型

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

下面是他们的ViewModel

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

我正在使用 Automapper 在它们之间进行映射。以下是我用来将 Dish 映射到 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;
    }

我在上述过程中遇到以下错误

谁能指导我在上述过程中做错了什么。

谢谢

【问题讨论】:

    标签: c# .net automapper automapper-5


    【解决方案1】:

    您必须为Ingredients 创建一个映射配置,类似于DishDishViewModel 的映射

    正如您在异常中看到的,缺少地图配置。

    将配置添加到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))
    
            );
    

    改成这样:

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

    您也不需要以下内容:

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

    由于属性名称相同,AutoMapper 会自动映射属性。

    所以你可以使用这个:

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

    【讨论】:

      猜你喜欢
      • 2019-12-06
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多