我正在尝试添加对其他表的引用,然后从数据库中加载信息。我要添加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类中,以便可以引用它?
您可以使用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方法加载相关数据。