Вот моя ситуация. У меня есть сообщения и комментарии. Когда я делаю запрос на получение сообщений, я пишу это так:
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.
Теперь странно то, что пользователь для комментария загружается только тогда, когда этот пользователь сделал сообщение ...
Если я попытайтесь прокомментировать пользователя, который не сделал сообщение, я получу нулевые значения, и при отладке он покажет, что пользователь не загружен. Но как только этот пользователь публикует сообщение (не связанное с сообщением, которое комментирует пользователь), тогда все загружается должным образом с комментарием.
Может кто-нибудь объяснить, что здесь происходит? Я не ожидаю, что каждый пользователь сделает сообщение, но я бы ожидал, что он прокомментирует. Почему быстрая загрузка не работает в этом сценарии?