ApplicationUser上的EF Core Navigation属性始终为null

时间:2018-04-11 06:18:28

标签: entity-framework-core

我正在尝试为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列。我认为这与我在一开始就遇到的问题基本相同。

0 个答案:

没有答案