AutoMapper - AutoMapper.AutoMapperMappingException

时间:2017-08-20 22:17:58

标签: c# asp.net automapper identity

当我尝试从一个对象映射到另一个对象时,我遇到了这个例外。

在我的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; }
}

任何人都可以帮我吗?提前致谢! :)

2 个答案:

答案 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。