Automapper 5.0.2 - 类型映射缺失或不支持的映射。

4

我已经在网上阅读了所有有关此问题的内容,但是没有任何帮助。以下是我的代码:

 Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<User, UserListViewModel>()
            .ForMember("RoleNames", c => c.Ignore())
            .ForMember("CostCentreNames", c => c.Ignore())
            .ForMember("RollupGroupNames", c => c.Ignore())
            .ForMember(c => c.CostCentres, m => m.MapFrom(d => d.DetailCostCentres))
            ;
        });

        Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<CostCentre, CostCentreListViewModel>();

        });

var users = _repo.AllIncluding(u => u.Roles, u=>u.CostCentres).OrderBy(u => u.UserName).ToList();
var  model = Mapper.Map<List<User>, List<UserListViewModel>>(users);

Mapper.Map给我报错了:

缺少类型映射配置或不支持的映射。

映射类型:
User -> UserListViewModel
Model.Models.User -> Model.ViewModels.UserListViewModel
描述:在当前 web 请求执行期间,出现未处理的异常。请检查堆栈跟踪信息,了解有关该错误以及代码中起源位置的详细信息。

异常详细信息:AutoMapper.AutoMapperMappingException: 缺少类型映射配置或不支持的映射。

映射类型:
User -> UserListViewModel
Model.Models.User -> Model.ViewModels.UserListViewModel

源错误:

第45行:
第46行:var users = _repo.AllIncluding(u => u.Roles, u=>u.CostCentres).OrderBy(u => u.UserName).ToList();
第47行:var model = Mapper.Map, List>(users);
第48行:return model;
第49行:}

2个回答

5

您只能执行一次Mapper.Initialize调用:

 Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<User, UserListViewModel>()
            .ForMember("RoleNames", c => c.Ignore())
            .ForMember("CostCentreNames", c => c.Ignore())
            .ForMember("RollupGroupNames", c => c.Ignore())
            .ForMember(c => c.CostCentres, m => m.MapFrom(d => d.DetailCostCentres));
            cfg.CreateMap<CostCentre, CostCentreListViewModel>();
        });

谢谢您的回复。我实际上已经解决了这个问题,但是它并没有解决我的问题。我将Automapper v2升级到v5,但需要进行一些代码修改才能使其正常工作。在我的情况下,它无法自动处理对象内部的集合。我不得不添加一行代码来指定它: - Mao
谢谢!这个问题让我整个早上都很疯狂...我们有多个Mapper.Initialize实例,一旦我们将它们合并成一个,并使用配置文件,一切就正常了。 - Dan H

0

谢谢您的回复。我实际上已经想通了,但是它没有解决我的问题。我将Automapper v2升级到v5并且需要进行一些代码修改才能正常工作。在我的情况下,它无法自动处理对象内部的集合。我不得不添加一行代码来指定:

Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<User, UserListViewModel>()
            .ForMember("RoleNames", c => c.Ignore())
            .ForMember("CostCentreNames", c => c.Ignore())
            .ForMember("RollupGroupNames", c => c.Ignore())
            .ForMember(c => c.CostCentres, m => m.MapFrom(d => d.DetailCostCentres));
            cfg.CreateMap(typeof(Role), typeof(RoleViewModel));
            cfg.CreateMap(typeof(CostCentre), typeof(CostCentreListViewModel));
        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接