我正在使用Automapper将列表映射到另一个列表,但似乎我的项目未被复制。
这是我的代码:
var roles = userRepo.GetRoles(null).ToList();
Mapper.CreateMap < List<Domain.Role>, List<Role>>();
var mappedRole = Mapper.Map<List<Domain.Role>, List<Role>>(roles); //the count is 0, list empty :(
Mapper.AssertConfigurationIsValid();
Domain.Role
public class Role
{
public int RoleId { get; set; }
public string RoleName { get; set; }
public List<User> Users { get; set; }
}
作用
public class Role
{
public int RoleId { get; set; }
public string RoleName { get; set; }
}
答案 0 :(得分:33)
不要在列表和数组之间创建映射,只能在类型之间创建:
Mapper.CreateMap<Domain.Role, Role>();
然后:
var mappedRole = Mapper.Map<List<Domain.Role>, List<Role>>(roles);
答案 1 :(得分:0)
在我的情况下,我正确配置了(父)类型映射,但我没有添加子记录的映射,所以为此:
class FieldGroup
{
string GroupName { get; set; }
...
List<Field> fields { get; set; }
}
我必须添加第二个映射:
cfg.CreateMap<FieldGroup, FieldGroupDTO>();
cfg.CreateMap<Field, FieldDTO>(); << was missing
答案 2 :(得分:0)
避免在映射器配置中添加集合。确保添加所有类型(类)。当集合不在配置中时我遇到了错误,但那是因为没有包含所有类型。有点误导,但这就是问题所在。点是,从mapper配置中删除所有集合并仅添加所有类。在进行实际转换时添加集合即。调用mapper.Map。
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Infrastructure.Entities.Pet, Domain.Model.Pet>();
cfg.CreateMap<Infrastructure.Entities.Owner, Domain.Model.Owner>().ReverseMap();
});
var mapper = config.CreateMapper();
var domainPetOwners = mapper.Map<List<Domain.Model.Owner>>(repoPetOwners);