我正在尝试为ApplicationUser提供一个“好友”列表(仅使用标准的ASP NET Core Identity实现)。
在我看来,ApplicationUser可以有多个好友,而好友可以拥有多个ApplicationUser。这意味着它有多对多的关系。
根据EF Core对M2M关系的现有限制,我创建了一个如下所示的连接类:
public class ApplicationUserBuddies
{
public string UserGUID { get; set; }
public ApplicationUser ApplicationUser { get; set; }
public string BuddyGUID { get; set; }
public ApplicationUser BuddyUser { get; set; }
}
然后我将模型构建器配置为在我的OnModelCreating覆盖
中识别这种关系builder.Entity<ApplicationModels.ApplicationUserBuddies>().HasOne(x => x.ApplicationUser)
.WithMany(x => x.Buddies).HasForeignKey(x => x.UserGUID).IsRequired();
但是,当我使用EF查询此表时,“伙伴”导航属性始终为null。实际字符串设置正确(对于该用户GUID)。这就是我获取这些细节的方法(注意我使用的是Include):
var buddies = await _context.ApplicationUserBuddies.Include(x => x.BuddyUser).Where(x => x.UserGUID == UserGUID)
.Select(x => x.BuddyUser).ToListAsync();
另一个奇怪的事情是在我的ApplicationUserBuddies表中,我得到了第三列,我没有设置任何名为BuddyUserID的列
我认为我遇到的问题是因为我有很多关系引用了一个表(AspNetUsers表),这可能会影响它。
如何将用户列表作为AspNetUsers的导航属性并使其正常工作?谢谢大家。
修改
我已将模型更改为符合EF约定
public class ApplicationUserBuddies
{
public string UserId { get; set; }
public ApplicationUser ApplicationUser { get; set; }
public string BuddyUserId { get; set; }
public ApplicationUser BuddyUser { get; set; }
}
我的模型构建器现在看起来像这样:
builder.Entity<ApplicationModels.ApplicationUserBuddies>().HasKey(x => new { x.UserId, x.BuddyUserId });
builder.Entity<ApplicationModels.ApplicationUserBuddies>().HasOne(x => x.ApplicationUser)
.WithMany(x => x.Buddies).HasForeignKey(x => x.BuddyUserId).IsRequired();
现在我有了UserId,BuddyUserId和错误的BuddyUserId1列。我认为这与我在一开始就遇到的问题基本相同。