将ViewModel映射到IdentityUser

时间:2014-06-19 19:38:02

标签: c# automapper asp.net-identity

我的Asp.Net Identity用户类中还有一些其他字段:

public class User : IdentityUser
{   
    public string Website { get; set; }
}

我有一个用户的ViewModel:

  public class UserViewModel
    {
        public string UserId { get; set; }

        public string Website { get; set; }
    }

这是我的映射:

 Mapper.CreateMap<UserViewModel, User>()
                .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.UserId));

当我尝试保存新用户时失败,说Id不能为空:

  public async Task<ActionResult> ExternalLoginConfirmation(UserViewModel model, string returnUrl)
        {           
                var user = Mapper.Map<User>(model);
                IdentityResult result = await UserManager.CreateAsync(user);
        }

如何正确映射Id字段?

1 个答案:

答案 0 :(得分:0)

好的,我有点像个白痴 - 当UserViewModel映射到User时,我显然不应该映射Id,因为它会自动生成。

我所做的只是解决问题的方法是从代码中删除.ForMember

当以相反方式映射时 - 从数据库加载用户并在View中显示它,以下代码确实可以正常映射:

  Mapper.CreateMap<User, UserViewModel>()
                .ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.Id));