Проблема с использованием метода Include в контексте Db - Asp. Net Core - PullRequest
0 голосов
/ 25 апреля 2020

Я получил бэкэнд на Asp. Net Core. Структура базы данных выглядит так:

  • Пользователь - основная информация о пользователе: логин, пароль и т. Д. c.
  • Профиль - эта сущность связана с «Пользовательской». к одному отношению
  • Фотографии профиля - у каждого пользователя есть своя коллекция фотографий. Эта сущность связана с «Профилем»

Вот сущность «Пользователь»:

    public class User
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Username { get; set; }
        public byte[] PasswordHash { get; set; }
        public byte[] PasswordSalt { get; set; }

        public Profile Profile { get; set; }
    }

Затем Профиль:

    public class Profile
    {


        [ForeignKey("User")]
        public int Id { get; set; }

        public string BannerImageUrl { get; set; }
        public string ProfileImageUrl { get; set; }
        public string ShortDescription { get; set; }
        public string Description { get; set; }


        public User User { get; set; }
        public ICollection<ProfilePhotos> ProfilePhotos { get; set; }
    }

И «ProfilePhotos ":

    public class ProfilePhotos
    {
        public int Id { get; set; }
        public string ImageUrl { get; set; }

        public int ProfileId { get; set; }
        public Profile Profile { get; set; }

    }

Я хочу получить все фотографии профиля, поэтому я создал конечную точку для этого:

        [HttpGet("{username}/photos")]
        public IActionResult GetPhotos(string username)
        {
            var profilePhotos = _profileService.GetAllPhotos(username);
            var model = _mapper.Map<IList<ProfilePhotosModel>>(profilePhotos);

            return Ok(model);
        }

Чтобы получить все фотографии, я использую метод из" profileService ":

        public IEnumerable<ProfilePhotos> GetAllPhotos(string username)
        {
            return _context.ProfilePhotos.Include(a=>a.Profile).ThenInclude(b=>b.User).Where(x => x.Profile.User.Username == username);

        }

В ответ я хочу получить идентификатор фотографии, photoUrl и имя пользователя, поэтому я сопоставил фотографии своего профиля с "ProfilePhotosModel"

    public class ProfilePhotosModel
    {
        public int Id { get; set; }
        public string ImageUrl { get; set; }
        public string Username { get; set; }

    }

, но, к сожалению, в ответ я получаю только Id и photoUrl. Нулевое имя пользователя :( Что я делаю не так?

1 Ответ

1 голос
/ 26 апреля 2020

Вы можете добавить пользовательское сопоставление для свойства Username.

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<ProfilePhotos, ProfilePhotosModel>()
        .ForMember(m => m.Username, exp => exp.MapFrom(p => p.Profile.User.Username));
});
...