[英]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.