簡體   English   中英

通過ThenInclude與EF相關的數據

[英]EF related data with ThenInclude

在EF Core中返回相關數據的正確,最高效的方法是什么?

我正在使用聯接表UserProjects來表示用戶和項目之間的多對多關系。

(用戶)1 --- M(UserProject)M --- 1(項目)1 --- M(文件)

如何為當前用戶返回特定項目上的所有文件?

我目前正在這樣做:

var userId = new Guid(_userManager.GetUserId(User));

var files = _dbContext.Users
                    .Include(up => up.UserProjects)
                    .ThenInclude(p => p.Project)
                    .ThenInclude(f => f.Files)
                    .Where(u => u.Id == userId)
                    .Single()
                    .UserProjects.Select(up => up.Project)
                    .Where(p => p.Id == projectId)
                    .Single().Files.ToList();

楷模:

public class ApplicationUser : IdentityUser<Guid>
{
    public virtual ICollection<UserProject> UserProjects { get; set; }
}

public class UserProject
{
    public Guid ApplicationUserId { get; set; }
    public ApplicationUser User { get; set; }

    public Guid ProjectId { get; set; }
    public Project Project { get; set; }
}

public class Project
{
    public Guid Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<UserProject> UserProjects { get; set; }
    public virtual ICollection<File> Files { get; set; }

}

public class File
{
    public Guid Id { get; set; }
    public string Name { get; set; }

    [Required]
    public Project Project { get; set; }

}

試試這個。

var userId = new Guid(_userManager.GetUserId(User));

var files = _dbContext.Files
               .Include(p => p.Project)
               .ThenInclude(up => up.UserProjects)
               .ThenInclude(u => u.User)
               .Where(x => x.Project.UserProjects.User.Id == userId)
               .ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM