繁体   English   中英

关于 Entity Framework Core 急切加载 .Include 中的项目的问题

[英]Issue regarding Entity Framework Core eager loading an item inside of .Include

这是我的情况。 我有帖子和评论。 当我查询以获取帖子时,我是这样写的:

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

现在评论实体有一个 Eagerly 加载的用户。

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

所以我需要应该急切地加载注释的用户来插入用户实体上可用的用户 ID 和图像路径。

现在奇怪的是,评论的用户只有在该用户发表帖子时才会急切地加载......

如果我尝试对尚未发表帖子的用户发表评论,我将获得空值,并且在调试时它会显示该用户未加载。 但是,一旦该用户发表了帖子(与用户评论的帖子无关),那么所有内容都会急切地与评论一起正确加载。

有人可以解释一下这里发生了什么吗? 我不希望每个用户都发帖,但我希望他们发表评论。 为什么在这种情况下急切加载不起作用?

您不会急切地加载用户的评论,但是如果他们发表了帖子,那么它会自动为您修复。

.Include(p => p.Comments).ThenInclude(c => c.User)到您的查询中以修复它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM