通过ApplicationUser类引用其他UserSettings类

问题描述 投票:0回答:1

我正在尝试添加对其他表的引用,然后从数据库中加载信息。我要添加UserSettings,因为用户可以配置多个设置。

我认为我已正确设置了所有内容,但不知何故没有加载外键表中的信息。我尝试了先前问题的各种帖子,但无法解决问题。

UserSetting.cs中的代码

public class UserSetting
{                                                     
    public string ID { get; set; }
    public string SettingType { get; set; }
    public string Description { get; set; }
    public string SettingValue { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}

ApplicationUser.cs中的代码

public class ApplicationUser : IdentityUser
{ 
    public virtual List<UserSetting> UserSettings { get; set; }
}

AppDbContext.cs中的代码

public class AppDbContext : IdentityDbContext<ApplicationUser>
{ 
    public AppDbContext(DbContextOptions<AppDbContext> options)                                                       
        : base(options)     
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {                    
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<ApplicationUser>(b =>          
        {                                        
              b.HasMany(e => e.UserSettings) 
                    .WithOne()             
                    .HasForeignKey(uc => uc.ID) 
                    .IsRequired();                       
        });                                                
     }
}

HomeController.cs中的代码

public class HomeController : Controller
{
    private readonly UserManager<ApplicationUser> userManager;
    public HomeController(UserManager<ApplicationUser> userManager
    {
         this.userManager = userManager;
    }

    public async Task<IActionResult> LoadProfile()     
    {
         var user = await userManager.FindByNameAsync("username");
    }
}

我在哪里以及如何将UserSettings加载到ApplicationUser类中,以便可以引用它?

asp.net-core asp.net-identity
1个回答
0
投票

您可以使用Include()来查询相关数据,如下所示:

Include()

如果要使用public async Task<IActionResult> LoadProfile() { var user = await userManager.Users .Include(u=>u.UserSettings) .SingleAsync(u=>u.UserName=="[email protected]"); } 获取相关数据,可以参考FindByEmailAsync()创建自己的IUserStore,并在其中使用FindByEmailAsync方法加载相关数据。

© www.soinside.com 2019 - 2024. All rights reserved.