AutoMapper提供的值类型错误

时间:2012-06-22 08:56:07

标签: c# type-conversion automapper

我正在尝试将类型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的新手,有点难过。

1 个答案:

答案 0 :(得分:3)

此处的问题是TagNameStringToTagCollectionResolver需要在其UserProfileEditorViewModel方法上接受ResolveCore类型的参数。

显示的错误消息表示,当需要提供类型为string的值时,映射中某处的某些内容在其方法签名中提供类型为UserProfileEditorViewModel的值。

考虑到措辞,这有点令人困惑,但这就是我解决问题的方法。

protected override IEnumerable<Tag> ResolveCore(UserProfileEditorViewModel source)
        {
            return _getTagsByNamesQuery.Invoke(source.Tags.Split(','));
        }