Man*_*thi 2 .net c# 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; }
[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; }
}
Run Code Online (Sandbox Code Playgroud)
以下是他们的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; }
}
Run Code Online (Sandbox Code Playgroud)
我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以指导我在上面的过程中做了什么错.
谢谢
您必须为其创建映射配置Ingredients,类似于Mapping for Dish和DishViewModel
正如您在异常中所看到的那样,缺少地图配置.
将配置添加到 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))
);
Run Code Online (Sandbox Code Playgroud)
改为:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Dish, DishViewModel>()
.ForMember(s => s.Ingredients, c => c.MapFrom(m => m.Ingredients));
cfg.CreateMap<Ingredients, IngredientsViewModel>();
});
Run Code Online (Sandbox Code Playgroud)
您也不需要以下内容:
.ForMember(s => s.Ingredients, c => c.MapFrom(m => m.Ingredients));
Run Code Online (Sandbox Code Playgroud)
由于属性的名称相同,AutoMapper将自动映射属性.
所以你可以使用这个:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Dish, DishViewModel>();
cfg.CreateMap<Ingredients, IngredientsViewModel>();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4947 次 |
| 最近记录: |