当我试图从一个对象映射到另一个对象时,我遇到了这个异常。
在我的global.asax.cs上,我得到了这个:
RoleManager<IdentityRole> roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new AppContext()));
Mapper.Initialize(cfg =>
{
cfg.CreateMap<AppUser, TokenAuthorizationModel>()
.ForMember(dest => dest.UserName, opt => opt.MapFrom(src => src.UserName))
.ForMember(dest => dest.Role, opt => opt.MapFrom(src => roleManager.FindById(src.Roles.First().RoleId).Name));
});我在我的登录控制器上得到了这个AutoMapper.AutoMapperMappingException异常,特别是在下面这一行:
TokenAuthorizationModel tokenClaims = Mapper.Map<TokenAuthorizationModel>(validUser);这些是我的模型:
public class AppUser : IdentityUser
{
public virtual List<CourseModel> Courses { get; set; }
public string FullName { get; set; }
public int Reputation { get; set; }
}和目的地:
public class TokenAuthorizationModel
{
public string UserName { get; set; }
public string Role { get; set; }
}有人能帮我一把吗?提前感谢!:)
发布于 2017-08-21 06:22:49
我认为问题出在这一部分:
.ForMember(dest => dest.Role, opt => opt.MapFrom(src => roleManager.FindById(src.Roles.First().RoleId).Name));在这种情况下,我不会使用MapFrom。尝试使用ResolveUsing方法,它接受一个lambda函数。
.ForMember(dest => dest.Role, opt => opt.ResolveUsing(src => roleManager.FindById(src.Roles.First().RoleId).Name));如果这不起作用,请让我知道!
发布于 2017-08-21 14:49:28
您应该为Role属性编写一个解析器,并在其中使用依赖注入,这样您就拥有了正确的DbContext,就像在应用程序中的其他任何地方一样。
https://stackoverflow.com/questions/45787271
复制相似问题