首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoMapper - AutoMapper.AutoMapperMappingException

AutoMapper - AutoMapper.AutoMapperMappingException
EN

Stack Overflow用户
提问于 2017-08-21 06:17:58
回答 2查看 237关注 0票数 0

当我试图从一个对象映射到另一个对象时,我遇到了这个异常。

在我的global.asax.cs上,我得到了这个:

代码语言:javascript
复制
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异常,特别是在下面这一行:

代码语言:javascript
复制
TokenAuthorizationModel tokenClaims = Mapper.Map<TokenAuthorizationModel>(validUser);

这些是我的模型:

代码语言:javascript
复制
public class AppUser : IdentityUser
{
    public virtual List<CourseModel> Courses { get; set; }
    public string FullName { get; set; }
    public int Reputation { get; set; }
}

和目的地:

代码语言:javascript
复制
public class TokenAuthorizationModel
{
    public string UserName { get; set; }
    public string Role { get; set; }
}

有人能帮我一把吗?提前感谢!:)

EN

回答 2

Stack Overflow用户

发布于 2017-08-21 06:22:49

我认为问题出在这一部分:

代码语言:javascript
复制
.ForMember(dest => dest.Role, opt => opt.MapFrom(src => roleManager.FindById(src.Roles.First().RoleId).Name));

在这种情况下,我不会使用MapFrom。尝试使用ResolveUsing方法,它接受一个lambda函数。

代码语言:javascript
复制
.ForMember(dest => dest.Role, opt => opt.ResolveUsing(src => roleManager.FindById(src.Roles.First().RoleId).Name));

如果这不起作用,请让我知道!

票数 0
EN

Stack Overflow用户

发布于 2017-08-21 14:49:28

您应该为Role属性编写一个解析器,并在其中使用依赖注入,这样您就拥有了正确的DbContext,就像在应用程序中的其他任何地方一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45787271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档