Как добавить отношения "один ко многим" между учетными записями отдельных пользователей в Asp. NET Core - PullRequest
0 голосов
/ 01 августа 2020

Я создаю мини-приложение для социальных сетей и хочу добавить отношения между отдельными учетными записями пользователей, чтобы сделать их друзьями. Я добавил объект List в свой класс User, унаследованный от пользователя Identity, для хранения других учетных записей пользователей в качестве друзей. Я успешно добавил учетную запись пользователя в список, но она исчезает после добавления еще одного друга. И когда я создал отдельный метод для представления списка друзей, в списке ничего нет.

Вот мой класс User,

public class AppUser : IdentityUser
{
    public int Age { get; set; }
    public string Sex { get; set; }
    public string City { get; set; }
    public string Education { get; set; }
    public string Description { get; set; }

    public List<AppUser> Friends { get; set; } = new List<AppUser>();
}

My DbContext class,

public class ApplicationDbContext : IdentityDbContext<AppUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
    }

    public DbSet<AppUser> Users { get; set; }
}

Методы моего класса контроллера для добавления отношения,

public async Task<IActionResult> AddFriend(string Id)
    {
        var friend = await userManager.FindByIdAsync(Id);
        var currentUser = await userManager.GetUserAsync(this.User);
        friend.Friends.Add(currentUser);
        currentUser.Friends.Add(friend);
        await userManager.UpdateAsync(currentUser);
        await userManager.UpdateAsync(friend);
        return View("Friends", currentUser.Friends);
    }
    public async Task<IActionResult> Friends()
    {
        var user = await userManager.GetUserAsync(this.User);
        var friends = user.Friends;
        return View(friends);
    }

1 Ответ

0 голосов
/ 01 августа 2020

Вы должны с энтузиазмом загрузить свою навигацию, но вы не можете сделать это с помощью usermanager, и вы должны использовать свой DbContext. Попробуйте это:

public async Task<IActionResult> Friends()
{
    var user = await _context.Users.Include(p=> p.Friends) // Use ApplicationDbContext 
                          .FirstOrDefaultAsync(q=> q.Id == yourId);
    var friends = user.Friends;
    return View(friends);
}
...