gpt4 book ai didi

c# - 复杂对象的自动映射器映射

转载 作者:行者123 更新时间:2023-11-30 18:27:46 25 4
gpt4 key购买 nike

我正在使用 Automapper 将我的模型对象映射到 DTO。在 DTO 中,主键应替换为相应的对象。为此,我使用了以下代码:

// Model class
public class SubDepartment
{
public long Id { get; set; }
public string Name { get; set; }
public long? DepartmentId { get; set; }
public DateTime LastUpdated { get; set; }
}

// DTO class
public class SubDepartmentDTO
{
public long Id { get; set; }
public string Name { get; set; }
public Department Department { get; set; }
public long EventCount { get; set; }
}

// Mapping code

Mapper.CreateMap<Models.Event.SubDepartment, DTO.SubDepartment>().ForMember(dto => dto.Department,
map => map.MapFrom(sd => Mapper.Map<Department, DTO.Department>(_departmentRepository.GetById(sd.DepartmentId.Value))));

但是当我在 Controller 中从 SubDepartment 映射到 SubDepartmentDTO 时,“部门”对象始终为空。我尝试用硬编码的 Department 对象替换 _departmentRepository.GetById(sd.DepartmentId.Value) 代码,它运行良好。我还验证了主键在数据库中是否存在相应的部门。谁能指出我做错了什么?

最佳答案

用这段代码试试

Mapper.CreateMap<Models.Event.SubDepartment, DTO.SubDepartment>().ForMember(dto => dto.Department,map => map.MapFrom(sd => _departmentRepository.GetById(sd.DepartmentId.Value)));

如果它不起作用你可以尝试自定义值解析器

Models.Event.SubDepartment, DTO.SubDepartment>().ForMember(dto => dto.Department, map => map.ResolveUsing<DepartmentResolver>());

public class DepartmentResolver: ValueResolver<Models.Event.SubDepartment,DTO.SubDepartment>
{
Reporsitory _departmentRepository;
protected override DTO.SubDepartment ResolveCore(Models.Event.SubDepartment source)
{
return _departmentRepository.GetById(source.DepartmentId.Value);
}
}

关于c# - 复杂对象的自动映射器映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26231654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com