簡體   English   中英

使用自動映射器將第二級嵌套列表屬性映射到第一級列表屬性

[英]Map a 2nd level nested list property to first level list property with automapper

我需要你的幫助。 我對自動映射器有基本的經驗,並且一切都很好,但是以某種方式,我無法將源對象中的下一個更改映射到目標對象。

讓我解釋一下:
在IUser中,我添加了一個屬性“ UserDetails”,此類包含一個名為“ Domains”的Guid屬性列表。

我想將該第二級列表屬性映射到我的UserDto對象,其中guid屬性的列表位於第一級。 在下面的示例中,Userkey映射工作正常,但是我對'DomainIds'始終保持null,並且看不到我在做錯什么。 我希望你能幫幫我

public interface IUser
{
    UserKey Key { get; }
    UserDetails Details { get; set; }
    FirstName { get; }
}

public struct UserKey
{
    private readonly Guid _id;
    public UserKey(Guid id)
    {
        _id = id;
    }
}

public class UserDetails
{
    public List<Guid> Domains { get; set; }
}

public class UserDto
{
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public List<Guid> DomainIds { get; set; }
}

映射設置如下:

CreateMap<IUser, UserDto>()
            .ForMember(
                dest => dest.Id,
                opt => opt.MapFrom(src => src.Key.Id))
            .ForMember(
                dest => dest.DomainIds,
                opt => opt.MapFrom(src => src.Details.Domains))

在我的測試中,我這樣映射用戶(這是一個IUser)。 Fyi,所有其他屬性都映射良好

_mapper.Map<UserDto>(user);

您的映射對我來說似乎很好:

Mapper.Initialize(config =>
{
    config.CreateMap<User, UserDto>()
        .ForMember(
            dest => dest.Id,
            opt => opt.MapFrom(src => src.Key.Id))
        .ForMember(
            dest => dest.DomainIds,
            opt => opt.MapFrom(src => src.Details.Domains));
});

var user = new User
{
    FirstName = "foo",
    Key = new UserKey { Id = Guid.NewGuid() },
    Details = new UserDetails
    {
        Domains = new List<Guid> { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() },
    },
};

var result = Mapper.Map<UserDto>(user);

使用以下類型:

public class User
{
    public UserKey Key { get; set; }
    public UserDetails Details { get; set; }
    public string FirstName { get; set; }
}
public class UserKey
{
    public Guid Id {get;set;}
}
public class UserDetails
{
    public List<Guid> Domains { get; set; }
}

public class UserDto
{
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public List<Guid> DomainIds { get; set; }
}

暫無
暫無

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

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