我有一些额外的字段在我的用户类为Asp。Net身份:
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字段?
好吧,我一直有点白痴-我显然不应该映射Id时映射UserViewModel到用户,因为它将自动生成。
我所做的解决这个问题是从代码中删除.ForMember
。
当以另一种方式映射时-从数据库加载用户并在视图中显示它时,以下代码可以正确地进行映射:
Mapper.CreateMap<User, UserViewModel>()
.ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.Id));