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

标签 c# many-to-many associations automapper object-object-mapping

我有两个实体:EmployeeTeam

alt text

我想要的是一个 EmployeeForm,其中包含 TeamName

alt text

如何使用 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 表达式选择集合的属性。

最佳答案

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

alt text

我使用关系表将多对多关联更改为两个一对多关联

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

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

是的,就是这样:)

这是平面 View 模型对象。

alt text

关于c# - Automapper - 将多对多关联映射到平面对象的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3694632/

相关文章:

c# - 登录时向浏览器中所有打开的客户端发送消息

c# - 如何将字节数组从 CSharp 客户端应用程序传递到 ATL COM 对象

c# - 合并 Linq 查询

django - 在 DRF 中为多对多创建记录

django - 如何通过直通关系保存ManyToMany字段

c# - ConsoleKeyInfo、问号和可移植性

python - Django ORM 无法为不在其中的多对多生成正确的 SQL

ruby-on-rails - ROR模型关联问题

ruby-on-rails - 如何在 Rails 中的对象上构建子关联而不保存父对象?

ruby-on-rails - Rails Postgresql 如何从一张表中获取 JOIN?