Как я могу использовать automapper для отношений многие-ко-многим в odata asp.net core 2.2 application? - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь создать проект с OData и Automapper на Asp.Net Core 2.2.

У меня есть две сущности с отношением многие ко многим.

public class User : IdentityUser<Guid>
    {
        [Required]
        public string Name { get; set; }

        [Required]
        public string Surname { get; set; }

        public List<UserRoom> UserRoom { get; set; } = new List<UserRoom>();
    }

public class Room
    {
        public Guid Id { get; set; }
        [Required]
        public string Title { get; set; }

        public string Description { get; set; }

        public List<UserRoom> UserRoom { get; set; } = new List<UserRoom>();
    }

public class UserRoom
    {
        public Guid UserId { get; set; }

        public User User { get; set; }

        public Guid RoomId { get; set; }

        public Room Room { get; set; }
    }

public class UserDto
    {
        public Guid Id { get; set; }

        public string Email { get; set; }

        public string Name { get; set; }

        public string Surname { get; set; }

        public List<RoomDto> Rooms { get; set; } = new List<RoomDto>();
    }

public class RoomDto
    {
        public Guid Id { get; set; }

        public string Title { get; set; }

        public string Description { get; set; }

        public List<UserDto> Users { get; set; } = new List<UserDto>();
    }

Я добавляю автомапер для проекта и использую код:

public class MappingProfile : Profile
    {
        public MappingProfile()
        {
            CreateMap<UserDto, User>();
            CreateMap<User, UserDto>();
            CreateMap<RoomDto, Room>();
            CreateMap<UserRoom, UserDto>()
                .ForMember(dto => dto.Id, opt => opt.MapFrom(x => x.User.Id))
                .ForMember(dto => dto.Email, opt => opt.MapFrom(x => x.User.Email))
                .ForMember(dto => dto.Name, opt => opt.MapFrom(x => x.User.Name))
                .ForMember(dto => dto.Surname, opt => opt.MapFrom(x => x.User.Surname))
            CreateMap<Room, RoomDto>()
                .ForMember(dto => dto.Users, opt => opt.MapFrom(x => x.UserRoom));
        }
    }

И мой контроллер OData:

public class RoomController : ControllerBase
    {
        private readonly Context _context;
        private readonly IMapper _mapper;

        public RoomController(Context context, IMapper mapper) 
        {
            _context = context;
            _mapper = mapper;
        }

        [HttpGet]
        [EnableQuery()]
        public IEnumerable<RoomDto> Get()
        {
            return _mapper.Map<IEnumerable<RoomDto>>(_context.Rooms);
        }

    }

Итак, когда я создаю запрос на получение номеровЯ понимаю, но когда я использую в моем запросе расширение, это только пустой массив пользователей. Как я могу решить мою проблему?

...