Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core .NET核心多对多查询_Asp.net Core_Many To Many_Asp.net Identity_Relationship - Fatal编程技术网

Asp.net core .NET核心多对多查询

Asp.net core .NET核心多对多查询,asp.net-core,many-to-many,asp.net-identity,relationship,Asp.net Core,Many To Many,Asp.net Identity,Relationship,我在项目模型和用户之间有一种多对多的关系。我试图显示登录用户是其成员的所有项目,但我无法正确显示 用户模型 public class AppUser : IdentityUser { public ICollection<UserProject> UserProjects { get; set; } } public class Project { public int ProjectId { get; set; } public string Proje

我在项目模型和用户之间有一种多对多的关系。我试图显示登录用户是其成员的所有项目,但我无法正确显示

用户模型

public class AppUser : IdentityUser
{
    public ICollection<UserProject> UserProjects { get; set; }
}
public class Project
{
    public int ProjectId { get; set; }

    public string ProjectName { get; set; }

    public ICollection<UserProject> UserProjects { get; set; }

}
public class UserProject
{
    public string UserId { get; set; }
    public AppUser AppUser { get; set; }

    public int ProjectId { get; set; }
    public Project Project { get; set; }
}
我曾经尝试过这样用SQL编写查询,但没有成功

        AppUser user = await userManager.GetUserAsync(HttpContext.User);

        var q = (from e in context.Projects
                  join t in context.UserProjects on e.ProjectId equals t.ProjectId
                  where t.UserId == user.Id
                  select e.ProjectName);
我已经成功地编写了一个查询,通过一个id和它的所有成员获取所有项目,如下所示

        var project = context.Projects
            .Where(x => x.ProjectId == id)
            .Include(x => x.UserProjects)
            .ThenInclude(x => x.AppUser)
            .First();

但我无法获得用户所参与的所有项目。我很感激能得到的任何帮助,谢谢

您可以获得用户所属的所有项目,如:

 var userID = User.Claims.FirstOrDefault(x=>x.Type== ClaimTypes.NameIdentifier).Value;

 var projects = _context.Users
    .Where(p => p.Id == userID)
    .SelectMany(p => p.UserProjects)
    .Select(pc => pc.Project).ToList() ;
在多对多关系中:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<UserProject>()
        .HasKey(pc => new { pc.UserId, pc.ProjectId });

    modelBuilder.Entity<UserProject>()
        .HasOne(pc => pc.AppUser)
        .WithMany(p => p.UserProjects)
        .HasForeignKey(pc => pc.UserId);

    modelBuilder.Entity<UserProject>()
        .HasOne(pc => pc.Project)
        .WithMany(c => c.UserProjects)
        .HasForeignKey(pc => pc.ProjectId);
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.HasKey(pc=>new{pc.UserId,pc.ProjectId});
modelBuilder.Entity()
.HasOne(pc=>pc.AppUser)
.WithMany(p=>p.UserProjects)
.HasForeignKey(pc=>pc.UserId);
modelBuilder.Entity()
.HasOne(pc=>pc.Project)
.WithMany(c=>c.UserProjects)
.HasForeignKey(pc=>pc.projectd);
}