. NET Основной запрос «многие ко многим» - PullRequest
0 голосов
/ 19 января 2020

У меня есть много-много отношений между моделью проекта и пользователем. Я пытаюсь отобразить все проекты, членом которых является зарегистрированный пользователь, но я не могу понять, как это правильно.

Модель пользователя

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; }

}

Модель UserProject

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);

Мне удалось написать запрос, чтобы получить все проекты по идентификатору и всем его участникам, подобным этому

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

Но мне не удается чтобы получить все проекты, в которых участвует пользователь. Я ценю любую помощь, которую могу получить, спасибо!

1 Ответ

0 голосов
/ 20 января 2020

Вы можете получить все проекты, участником которых является пользователь:

 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...