C# 将ViewModel映射到IdentityUser
我在Asp.Net标识的用户类上有一些附加字段:C# 将ViewModel映射到IdentityUser,c#,automapper,asp.net-identity,C#,Automapper,Asp.net Identity,我在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; }
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字段?好的,我有点傻-显然,在将UserViewModel映射到用户时,我不应该映射Id,因为它将自动生成 我所做的只是从代码中删除.ForMember 当以另一种方式进行映射时(从数据库加载用户并将其显示在视图中),以下代码确实可以正确地进行映射:
Mapper.CreateMap<User, UserViewModel>()
.ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.Id));
id的映射看起来是正确的。您可以通过在尝试创建user.Id之前检查它来进行验证。再次查看异常,确保抛出错误的是User.Id,而不是缺少的子集合。如果我快速查看它并单击基类,然后再次单击基类,则它确实为null。然后抛出EntityValidationError:Id是必需的。但是AutoMapper做了它的部分吗?如果你创建了一个新用户,并在没有AutoMapper的情况下自己映射属性,你会得到同样的错误吗?@Jansen AutoMapper正在尽自己的责任——这就是问题所在:当创建一个新用户时,我不应该映射Id!