繁体   English   中英

如何在 Asp.NET Core 中的个人用户帐户之间添加一对多关系

[英]How to add one to many relationship between Individual user accounts in Asp.NET Core

我正在创建一个迷你社交媒体 web 应用程序,我想添加个人用户帐户之间的关系,以便我可以让他们成为朋友。 我已将列表 object 添加到我的身份用户继承的用户 class 以将其他用户帐户存储为朋友。 我已成功将用户帐户添加到列表中,但在我添加另一个朋友后它消失了。 当我创建了一个单独的方法来提供包含朋友列表的视图时,列表中没有任何内容。

这是我的用户 class,

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

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

我的 Controller Class 方法添加关系,

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

你应该急切地加载你的导航,但你不能用用户管理器来做,你必须使用你的 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM