[英]Automapper with Child List Property Mapping Issue
我有以下模特
楷模
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在它們之間進行映射。 以下是我用於將菜單映射到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;
}
任何人都可以指導我在上面的過程中做了什么錯。
謝謝
您必須為Ingredients
創建Mapping配置,類似於Dish
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))
);
改為:
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>();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.