通过 ApplicationUser class 引用额外的 UserSettings class
Reference an additional UserSettings class through the ApplicationUser class
我正在尝试添加对其他 table 的引用,然后从数据库加载信息。我想添加 UserSettings,因为用户可以有多个可以配置的设置。
我认为我已正确设置所有内容,但不知何故未加载来自外键 table 的信息。我尝试了之前问题的各种帖子,但我无法解决问题。
代码在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 class 以便我可以引用它?
您可以使用Include()
查询相关数据,如下所示:
public async Task<IActionResult> LoadProfile()
{
var user = await userManager.Users
.Include(u=>u.UserSettings)
.SingleAsync(u=>u.UserName=="sherry@email.com");
}
如果要使用FindByEmailAsync()
获取相关数据,可以参考创建自己的IUserStore,在FindByEmailAsync方法中加载相关数据。
我正在尝试添加对其他 table 的引用,然后从数据库加载信息。我想添加 UserSettings,因为用户可以有多个可以配置的设置。
我认为我已正确设置所有内容,但不知何故未加载来自外键 table 的信息。我尝试了之前问题的各种帖子,但我无法解决问题。
代码在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 class 以便我可以引用它?
您可以使用Include()
查询相关数据,如下所示:
public async Task<IActionResult> LoadProfile()
{
var user = await userManager.Users
.Include(u=>u.UserSettings)
.SingleAsync(u=>u.UserName=="sherry@email.com");
}
如果要使用FindByEmailAsync()
获取相关数据,可以参考