我有两个实体:Employee
和 Team
。
我想要的是一个 EmployeeForm
,其中包含 Team
的 Name
。
如何使用 AutoMapper 实现此目的?
我目前的“解决方案”如下:
Mapper.CreateMap<Employee, EmployeeForm>()
.ForMember(dest => dest.TeamName, opt => opt.MapFrom(x => x.GetTeams().FirstOrDefault() != null ? string.Join(", ", x.GetTeams().Select(y=>y.Name)) : "n/a"));
在我看来,这可读性很差。
我想要的是一个通用方法,我可以在其中传递实体、选择集合并说明集合是否为 null 时返回默认值或通过 lambda 表达式选择集合的属性。
最佳答案
我重新考虑了我的整个设计,开始改变领域模型:
我使用关系表将多对多关联
更改为两个一对多关联
。
有了这个更简单的域模型,我可以使用 AutoMapper 轻松地将其映射到一个平面 DTO。
public class TeamEmployeeMapperProfile : Profile
{
protected override void Configure()
{
CreateMap<TeamEmployee, TeamEmployeeForm>();
}
}
是的,就是这样:)
这是平面 View 模型对象。
关于c# - Automapper - 将多对多关联映射到平面对象的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3694632/