簡體   English   中英

Automapper - 將多對多關聯映射到平面對象的最佳實踐

[英]Automapper - Bestpractice of mapping a many-to-many association into a flat object

我有兩個實體: EmployeeTeam

替代文字

我想要的是一個擁有Team NameEmployeeForm

替代文字

如何使用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表達式選擇集合的屬性。

我重新考慮我的整個設計開始更改域模型

替代文字

我改變了many-to-many association成兩個one-to-many associations使用關系表。

使用這個更簡單的域模型 ,我可以使用AutoMapper輕松將其映射到平面DTO

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

是的,這就是:)

這是平面視圖模型對象。

替代文字

您可以在Employee上創建一個名為“TeamNames”的只讀字符串屬性。 將列表構建邏輯放在那里。 這樣,你就擁有了一個可測試的屬性(與lambda表達式相比),它將使你的映射更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM