如何在 Asp.NET Core 中的个人用户帐户之间添加一对多关系
How to add one to many relationship between Individual user accounts in Asp.NET Core
我正在创建一个迷你社交媒体网络应用程序,我想添加个人用户帐户之间的关系,以便我可以让他们成为朋友。我已将列表对象添加到我的身份用户继承用户 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; }
}
My 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);
}
您应该预先加载您的导航,但您不能使用 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);
}
我正在创建一个迷你社交媒体网络应用程序,我想添加个人用户帐户之间的关系,以便我可以让他们成为朋友。我已将列表对象添加到我的身份用户继承用户 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; }
}
My 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);
}
您应该预先加载您的导航,但您不能使用 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);
}