Automapper - 将多对多关联映射到平面对象的最佳实践

Roo*_*ian 5 c# many-to-many associations automapper object-object-mapping

我有两个实体:EmployeeTeam.

替代文字

我想要的是EmployeeForm具有NameTeam.

替代文字

如何使用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"));
Run Code Online (Sandbox Code Playgroud)

在我看来,这是可读的.

我想要的是一个通用方法,我可以传递一个实体,选择集合并说集合是否为null返回默认值,或者通过lambda表达式选择集合的属性.

Roo*_*ian 2

我重新思考了我的整个设计,开始改变域模型

替代文本

我使用关系表将其更改many-to-many association为两个。one-to-many associations

有了这个更简单的域模型,我可以使用AutoMapper轻松地将其映射到平面 DTO中。

public class TeamEmployeeMapperProfile : Profile
{
    protected override void Configure()
    {
        CreateMap<TeamEmployee, TeamEmployeeForm>();
    }
}
Run Code Online (Sandbox Code Playgroud)

是的,就是这样:)

这是平面视图模型对象。

替代文本