簡體   English   中英

Automapper:如何 map 一個源到多個目的地

[英]Automapper: How to map one source to multiple destinations

我有以下示例實體:

public class User
{
    public string Username { get; set; }
    public string Password { get; set; }
    pubilc HashSet<UserRole> Roles { get; set; }
}

public class Role
{
    public string RoleName { get; set; }
    public HashSet<UserRole> Users { get; set; }
}

public class UserRole
{
    public int UserId { get; set; }
    public virtual User User { get; set; }
    public int RoleId { get; set; }
    public virtual Role Role { get; set; }
}

以及以下 Dto:

public class UserModel
{
    public string Username { get; set; }
    public string Password { get; set; }
    pubilc HashSet<RoleModel> Roles { get; set; }
}

public class RoleModel
{
    public string RoleName { get; set; }
    public HashSet<UserModel> Users { get; set; }
}

使用以下 AutoMapper 配置:

CreateMap<User, UserModel>();

CreateMap<Role, RoleModel>();

CreateMap<UserRole, UserModel>()
    .ConstructUsing((src, ctx) => ctx.Mapper.Map<UserModel>(src.User));

CreateMap<UserRole, RoleModel>()
    .ConstructUsing((src, ctx) => ctx.Mapper.Map<RoleModel>(src.Role));

但是這種配置會導致 iis 停止而沒有任何錯誤!

此配置是否適合將一個源映射到多個目標?

Github測試項目

我不確定這是否是使用這種映射的好方法。 但問題在於映射中發生的無限循環(可能是嵌套映射)。

堆棧溢出異常

用戶A

以下被注釋的代碼是循環的來源:

循環源

您可以嘗試以下映射:

public MapperConfig()
    {
        CreateMap<User, UserModel>();

        CreateMap<UserRole, RoleModel>()
            .ForMember(des=>des.RoleName,opt=>opt.MapFrom(src=>src.Role.RoleName));

        CreateMap<Role, RoleModel>();
        CreateMap<UserRole, UserModel>()
            .ForMember(des => des.Username, opt => opt.MapFrom(src => src.User.Username))
            .ForMember(des => des.Password, opt => opt.MapFrom(src => src.User.Password));

    }

暫無
暫無

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

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