Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有子列表属性映射的自动映射问题_C#_.net_Automapper_Automapper 5 - Fatal编程技术网

C# 具有子列表属性映射的自动映射问题

C# 具有子列表属性映射的自动映射问题,c#,.net,automapper,automapper-5,C#,.net,Automapper,Automapper 5,我有以下型号 型号 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; } [Re

我有以下型号

型号

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; }
}
公共类菜肴
{
[必需]
公共Int64 ID{get;set;}
[必需]
公共字符串名称{get;set;}
[必需]
公共字符串说明{get;set;}
[必需]
公共双价{get;set;}
[必需]
来自{get;set;}的公共日期时间
[必需]
公共日期时间{get;set;}
[必需]
公共布尔值可用{get;set;}
[必需]
公共字符串MealImage{get;set;}
[必需]
公共列表成分{get;set;}
}
公共级配料
{
[必需]
公共Int64 ID{get;set;}
[必需]
公共字符串名称{get;set;}
[必需]
公共整数数量{get;set;}
[必需]
公共Int64盘_ID{get;set;}
[外键(“盘号”)]
公共虚拟盘碟{get;set;}
}
下面是他们的视图模型

 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; }
}
公共类DishViewModel
{
公共Int64 ID{get;set;}
[必需]
公共字符串名称{get;set;}
[必需]
公共字符串说明{get;set;}
[必需]
公共双价{get;set;}
[必需]
来自{get;set;}的公共日期时间
[必需]
公共日期时间{get;set;}
公共布尔值可用{get;set;}
公共字符串MealImage{get;set;}
[必需]
公共字符串IngredientsData{get;set;}
公共列表成分{get;set;}
}
公共类InCreditsViewModel
{
[必需]
公共字符串名称{get;set;}
[必需]
公共整数数量{get;set;}
[必需]
公共Int64盘_ID{get;set;}
}
我使用Automapper在它们之间进行映射。下面是我用来将碟子映射到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;
    }
public disview模型创建(Dish-Dish)
{
初始化(cfg=>cfg.CreateMap())
.FormMember(s=>s.Components,c=>c.MapFrom(m=>m.Components))
);
DishViewModel DishViewModel=Mapper.Map(dish);
回归模型;
}
我在上面的过程中遇到以下错误

谁能告诉我在上述过程中我做错了什么


谢谢

您必须为
配料
创建一个映射配置,类似于
碟片
碟片模型

正如您在异常中所看到的,表示缺少映射配置

将配置添加到映射器。初始化

Mapper.Initialize(

    // Here you are only adding one config.

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

        );
由于属性的名称相同,AutoMapper将自动映射属性

所以你可以用这个:

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

          cfg.CreateMap<Ingredients, IngredientsViewModel>();

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

          cfg.CreateMap<Ingredients, IngredientsViewModel>();

     });