当我尝试从一个对象映射到另一个对象时,我遇到了这个例外。
在我的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; }
}
任何人都可以帮我吗?提前致谢! :)
答案 0 :(得分:0)
我认为问题出在这一部分:
.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));
如果这不起作用,请告诉我!
答案 1 :(得分:0)
您应该为Role属性编写一个解析器,并在其中使用依赖注入,这样您就可以像在应用程序中的任何其他位置一样使用正确的DbContext。