Automapper: как сопоставить один источник нескольким получателям - PullRequest
0 голосов
/ 07 октября 2019

У меня есть следующие образцы объектов:

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; }
}

и следующие Dtos:

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

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Вы можете попробовать следующее сопоставление:

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));

    }
1 голос
/ 08 октября 2019

Я не уверен, является ли это хорошим подходом к использованию такого отображения или нет. Но проблема в бесконечном цикле, который возникает в отображении (возможно, вложенное отображение).

StackOverflowException

UserA

Следующие коды, которые комментируются, являются источником цикла:

Loop Source

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...