我正在尝试将类型UserProfileEditorViewModel
映射到类型UserProfile
,如下所示:
public ActionResult Edit(UserProfileEditorViewModel userProfileViewModel)
{
UserProfile user = _getUserByIdQuery.Invoke(SessionData.UserId);
Mapper.Map(userProfileViewModel, user);
目前引发此错误:
提供的值是System.String类型但是可以预期 MyNamespace.Web.Models.UserProfileEditorViewModel。
在Mapper.Map(userProfileViewModel, user);
行。
我的映射配置如下:
Mapper.CreateMap<UserProfileEditorViewModel, UserProfile>()
.ForMember(
dto => dto.Tags,
opt => opt.ResolveUsing<TagNameStringToTagCollectionResolver>());
TagNameStringToTagCollectionResolver
的样子:
protected override IEnumerable<Tag> ResolveCore(string source)
{
return _getTagsByNamesQuery.Invoke(source.Split(','));
}
任何想法为何抛出异常?我是Automapper的新手,有点难过。
答案 0 :(得分:3)
此处的问题是TagNameStringToTagCollectionResolver
需要在其UserProfileEditorViewModel
方法上接受ResolveCore
类型的参数。
显示的错误消息表示,当需要提供类型为string
的值时,映射中某处的某些内容在其方法签名中提供类型为UserProfileEditorViewModel
的值。
考虑到措辞,这有点令人困惑,但这就是我解决问题的方法。
protected override IEnumerable<Tag> ResolveCore(UserProfileEditorViewModel source)
{
return _getTagsByNamesQuery.Invoke(source.Tags.Split(','));
}