3

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

4

1 回答 1

3

这里的问题是需要在其方法上TagNameStringToTagCollectionResolver接受类型参数。UserProfileEditorViewModelResolveCore

显示的错误消息表明映射中的某处在需要提供 type 的值时string在其方法签名中提供了 type 的值UserProfileEditorViewModel

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

protected override IEnumerable<Tag> ResolveCore(UserProfileEditorViewModel source)
        {
            return _getTagsByNamesQuery.Invoke(source.Tags.Split(','));
        }
于 2012-06-22T10:31:47.857 回答