关于实体框架核心急于在中加载项的问题.包括



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

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

现在comments实体有一个Eaglely加载的User。

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。

现在奇怪的是,只有当评论的用户发布了帖子时,该用户才会被急切地加载。。。

如果我试图与一个没有发帖的用户进行评论,我会得到null值,当我调试时,它会显示用户没有被加载。但是,一旦用户发布了一篇帖子(与用户评论的帖子无关(,那么所有内容都会急切地正确加载评论。

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

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

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

最新更新