1. ホーム
  2. c#

[解決済み] EF CoreでThenIncludeを2回呼び出すには?

2023-08-02 16:48:24

質問

ASP.NET Core APIアプリを作成し、EF Coreに依存しています。私はこのように定義されたエンティティを持っています。

public class AppUser : IdentityUser
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    [InverseProperty(nameof(Post.Author))]
    public ICollection<Post> Posts { get; set; } = new List<Post>();
}

public class Post
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string AuthorId { get; set; }

    [ForeignKey("AuthorId")]
    public virtual AppUser Author { get; set; }

    [InverseProperty(nameof(Like.Post))]
    public ICollection<Like> Likes { get; set; } = new List<Like>();

    [InverseProperty(nameof(Comment.Post))]
    public ICollection<Comment> Comments { get; set; } = new List<Comment>();
}

ここで CommentLike はその他のエンティティです。簡潔にするためにエンティティを簡略化していることに注意してください。次に Posts を取得し、さらに LikesComments を取得したことになります。ということで、こんな感じにしてみました。

return _context.Users
               .Include(u => u.Location)
               .Include(u => u.Posts)
                    .ThenInclude(p => p.Comments)
                        .ThenInclude(c => c.Owner)
               .Include(u => u.Posts)
                    .ThenInclude(p => p.Likes)
                        .ThenInclude(l => l.Giver)
               .Where(u => u.Id == userId)
               .FirstOrDefault();

さて、これはうまくいくのですが、ご覧の通り、私は .Include(u = u.Posts) を2回呼び出しています。どうすれば ThenInclude を二度呼び出す方法はありますか? Include ステートメントを2回書かずに?

どのように解決するのですか?

を使用することはできません。 ThenInclude を複数のナビゲーション・プロパティと一緒に使うことはできません。必ず Include .

以下は バグ が開設されました。