Проблема, связанная с Entity Framework Core, стремящейся загрузить элемент внутри .Include - PullRequest
0 голосов
/ 05 марта 2020

Вот моя ситуация. У меня есть сообщения и комментарии. Когда я делаю запрос на получение сообщений, я пишу это так:

var queryable = _dataContext.Post
                    .Where(x => x.DateCreated <= initialDateOfPageLoad)
                    .AsQueryable();

var posts = await queryable
                .Include(p => p.User)
                .Include(c => c.Comments) // ***
                .Include(l => l.Likes)
                .OrderByDescending(p => p.DateCreated)
                .ToListAsync();

Теперь у объекта комментариев есть загруженный пользователь.

public class Comment
{
    public int Id { get; set; }
    public int PostId { get; set; }
    public Post Post { get; set; }
    public Guid UserId { get; set; }
    public User User { get; set; } // ***
    public string Body { get; set; }
    public bool Modified { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime? DateModified { get; set; }
}

Всякий раз, когда я получаю свои сообщения обратно, я сопоставляю комментарии в dto, например:

public class CommentDto
{
    public int Id { get; set; }
    public string Body { get; set; }
    public DateTime DateCreated { get; set; }
    public Guid UserId { get; set; }
    public int PostId { get; set; }
    public string DisplayName { get; set; } // ***
    public string ImagePath { get; set; } // ***
}

Поэтому мне нужен пользователь, который должен быть загружен с комментарием, чтобы вставить UserId и ImagePath, которые доступны в User Entity.

Теперь странно то, что пользователь для комментария загружается только тогда, когда этот пользователь сделал сообщение ...

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

Может кто-нибудь объяснить, что здесь происходит? Я не ожидаю, что каждый пользователь сделает сообщение, но я бы ожидал, что он прокомментирует. Почему быстрая загрузка не работает в этом сценарии?

1 Ответ

1 голос
/ 05 марта 2020

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

Добавьте .Include(p => p.Comments).ThenInclude(c => c.User) к вашему запросу, чтобы исправить это.

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