使用Automapper映射EditModel



我试图使用Automapper映射ViewModel类与下面列出的类:

public class Product
{
    [Key]
    public int ProductId { get; set; }
    public string Name { get; set; }
    public ICollection<Color> Color { get; set; }
}
public class Color
{
    [Key]
    public int id { get; set; }
    public string value { get; set; }
    public virtual ICollection<Product> products { get; set; }
}
public class ProductVM
{
    [Key]
    public int ProductId { get; set; }
    public string Name { get; set; }
    public List<int> Color { get; set; }
    public IEnumerable<Color> Colors { get; set; } 
}

对于Colors,我将所有可用的颜色传递给视图供用户选择,并将Color属性传递给视图以获取值,在视图中添加如下内容:

@Html.ListBoxFor(model => Model.Color, new MultiSelectList(Model.Colors, "id", "value"));

然后在控制器中,我有一个Post方法,它保存它。我试图使用Automapper转换类,但它无法映射颜色属性,因为它应该通过可用的id获取颜色对象。

Mapper.CreateMap<ProductVM, Product>();
Product product = AutoMapper.Mapper.Map<ProductVM, Product>(productVM);
db.Products.Add(product);
db.SaveChanges();

我错过了什么吗?

我在我的解决方案中尝试了一些东西,颜色将为null,因为selectlist没有从视图返回。你的int (color)列表不会为空,你可以将其映射到color对象。

var productVM = new ProductVM
{
    Name = "Test",
    ProductId = 5,
    Colors = null,
    Color = new List<int> {1, 5, 8}
};
Mapper.CreateMap<int, Color>()
    .ForMember(dest => dest.id, opt => opt.MapFrom(src => src));
Mapper.CreateMap<ProductVM, Product>()
    .ForMember(dest => dest.Color, opt => opt.MapFrom(src => src.Color));
Product product = AutoMapper.Mapper.Map<ProductVM, Product>(productVM);
db.Products.Add(product);
db.SaveChanges();

发生这种情况是因为Automapper不知道如何从List Color to icoltion<颜色>颜色。试着创建一个映射。

Mapper.CreateMap<SourceObject, TargetObject>();
Mapper.CreateMap<SourceOuterObject, TargetOuterObject>()
    .ForMember(dest => dest.TargetList, opt => opt.MapFrom(src => src.SourceSet.SourceList);

相关内容

  • 没有找到相关文章

最新更新