如何从ViewModel映射到Model
本文关键字:Model 映射 ViewModel | 更新日期: 2023-09-27 18:06:14
我有一个像这样的模型和ViewModel
public class Estate : BaseEntity
{
public virtual BaseInformation floorType { get; set; }
}
public class BaseInformation:BaseEntity
{
public string Name { get; set; }
public virtual BaseInformationHeader Master { get; set; }
}
public class EstateViewModel : BaseEntityViewModel
{
public long floorType { get; set; }
}
和控制器中的代码:
[HttpPost]
public long save(EstateViewModel estateViewModel)
{
Estate entity = new Estate();
BaseInformation bi = new BaseInformation();
bi.id = 1;
entity.floorType = bi;
EstateViewModel ev = new EstateViewModel();
Mapper.CreateMap<EstateViewModel, Estate>();
var model = AutoMapper.Mapper.Map<EstateViewModel,Estate>(estateViewModel);
return estateRepository.save(entity);
}
当操作被执行时,AutoMapper抛出以下异常:
类型为'AutoMapper '的异常。AutoMapperMappingException的发生在AutoMapper.dll中,但未在用户代码
中处理
是什么导致这种情况发生?
我的问题解决方案在这里找到:http://cpratt.co/using-automapper-creating-mappings/代码是这样的:
AutoMapper.Mapper.CreateMap<PersonDTO, Person>()
.ForMember(dest => dest.Address,
opts => opts.MapFrom(
src => new Address
{
Street = src.Street,
City = src.City,
State = src.State,
ZipCode = src.ZipCode
}));
查看内部异常-它为您提供了对问题的良好描述。我还会考虑在其他地方的静态方法中设置所有的CreateMap调用,该方法在app start:
时调用public class AutoMapperConfiguration
{
public static void Configure()
{
Mapper.CreateMap<EstateViewModel, Estate>();
}
}
然后在global。asax:
protected void Application_Start()
{
AutoMapperConfiguration.Configure();
}
[Update] -将属性映射到其他具有不同名称的属性:
Mapper.CreateMap<ViewModel, Model>()
.ForMember(dest => dest.Id, o => o.MapFrom(src => src.DestinationProp));
你的问题是源属性是一个long
,而目标是一个复杂类型——你不能从源映射到目标,因为它们不是相同的类型。
。Id是一个长,那么你应该可以这样做:
Mapper.CreateMap<ViewModel, Model>()
.ForMember(dest => dest.Id, o => o.MapFrom(src => src.floorType ));
你的模型不是很清楚