查询多对多关系用户 -> 类

Query on many-to-many relationship Users -> Classes

我有两个实体,Users 和 类,具有多对多关系。我正在使用 .Net Core,我在这个博客 post HERE 之后建立了关系(直到第 3 部分)。数据库有效,我可以添加 classes 并填充连接 table,但我不知道如何检索用户注册的所有 classes,或者反过来,所有在特定 class.

中注册的用户

我需要它来解决用户已经登录 class 并且我不必向连接 table 添加新条目的情况(这仍然会抛出一个错误)。

User.cs

public class User : IdentityUser
{
    // Making the classes a JoinCollectionFacade allows us to perform actions like adding a class
    public User()
        => Classes = new JoinCollectionFacade<Class, UserClass>(
            UserClass,
            uc => uc.Class,
            c => new UserClass { User = this, Class = c });

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Type { get; set; }
    //public string Email { get; set; }
    public string Phone { get; set; }
    public string Membership { get; set; }

    private ICollection<UserClass> UserClass { get; } = new List<UserClass>();

    // This element does not need to be mapped. It's used for easier reference
    // to the Users enrolled in the class
    [NotMapped]
    public ICollection<Class> Classes { get; }
}

Class.cs

public class Class
{

    // Making the classes a JoinCollectionFacade allows us to perform actions like adding a class
    public Class()
        => Users = new JoinCollectionFacade<User, UserClass>(
            UserClass,
            uc => uc.User,
            u => new Models.UserClass { User = u, Class = this });

    public Class(Instructor i, string d)
    {
        Instructor = i;
        Description = d;
    }

    public int Id { get; set; }
    public virtual Instructor Instructor { get; set; } // Made virtual so we can take advantage of certain Entity Framework such as lazy loading (from Microsoft docs)
    public string Description { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }

    private ICollection<UserClass> UserClass { get; } = new List<UserClass>();

    // This element does not need to be mapped. It's used for easier reference
    // to the Users enrolled in the class
    [NotMapped]
    public ICollection<User> Users { get; }
}

用户Class.cs

public class UserClass
{
    public string UserId { get; set; }
    public User User { get; set; }

    public int ClassId { get; set; }
    public Class Class { get; set; }
}

我通过

解决了我的问题
  • 在 User.cs 和 Class.cs
  • 中创建 UserClass public 的实例
  • 使用下面的这种查询来检索在特定 class
  • 中注册的所有用户
var usersInClass = _context.Users
                      .Include(i => i.UserClass).ThenInclude(i => i.Class)
                      .Where(x => x.UserClass.Select(pc => pc.Class).Any(c => c.Id == id))
                      .ToList();