簡體   English   中英

Automapper:如何使用源類型的屬性映射許多成員?

[英]Automapper: how to map many members using a property of source type?

// source classes
public class User 
{
    public string Id { get; set; }
    public string Name { get; set; }
}

public class UserStatus 
{
    public User User { get; set; }
    public int Status { get; set; }
}

// dest classes
public class UserVM 
{
    public string Id { get; set; }
    public string Name { get; set; }
}

public class UserStatusVM : UserVM 
{
    public int Status { get; set; }
}

//Automapper configuration
c.CreateMap<User, UserVM>();
c.CreateMap<UserStatus, UserStatusVM>()
  .ForMember(dest => dest.Status, opt => opt.MapFrom(source => source.Status))
  .ForAllOtherMembers(opt => opt.ResolveUsing(source => Mapper.Map<User, UserVM>(source.User))); // error there

我的目標是從UserStatus類的User屬性映射UserStatusVM所有成員(不包括Status 1),就像在映射Users -> UserVM

我該如何實現? 是唯一的解決方案ForMember(dest => dest.Id, opt => opt.MapFrom(source => source.User.Id))例如ForMember(dest => dest.Id, opt => opt.MapFrom(source => source.User.Id))等。

重命名UserVM的屬性

public class UserVM 
{
    public string UserId { get; set; }
    public string UserName { get; set; }
}

UserIdUserName將按照約定分別從UserStatus.User.IdUserStatus.User.Name映射。

注意

映射時, UserVM.UserId看到UserVM.UserId不在UserStatus類型上退出,因此它將UserId拆分為UserId (通過CamelCase),並從UserStatus.User.Id映射UserVM.UserId

暫無
暫無

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

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