【发布时间】:2020-03-21 23:43:13
【问题描述】:
我找不到正确扩展 ASP.NET Core 的 IdentityUser 的方法(扩展后:ApplicationUser)。我可以覆盖它并将其与其他模型链接,但不能从用户链接到其他模型。像CustomTag 这样的简单数据有效。
问题源代码:https://github.com/chanibal/CoreIdentityIssue
或者,具体来说,it's second commit that contains all the changes over the default template
我做了什么:
- 已创建新项目:
ASP.NET Core Web 应用程序(模型-视图-控制器)
身份验证:个人用户帐户,在应用程序中存储用户帐户
更新了数据库 -
更改了覆盖
IdentityUser的模型(如official docs):public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) {} public DbSet<Bar> Bars { get; set; } public DbSet<Foo> Foos { get; set; } public DbSet<ApplicationUser> ApplicationUsers { get; set; } //< doesn't help } public class ApplicationUser : IdentityUser { public string CustomTag { get; set; } //< this works public Bar Bar { get; set; } //< THIS DOES NOT WORK } public class Bar { public int Id { get; set; } public int Value { get; set; } } public class Foo { public int Id { get; set; } public ApplicationUser User { get; set; } //< this works }并迁移了更改
我正在以这种方式更新 Bar 值:
/// This should ensure a Bar is connected to a ApplicationUser
/// and increment it's value
[Authorize]
public async Task<IActionResult> IncrementBar()
{
// This DOES NOT work
var user = await _userManager.GetUserAsync(HttpContext.User);
if (user.Bar == null) //< this is always null
{
user.Bar = new Bar() { Value = 0 };
// _context.Add(user.Bar); //< doesn't help
}
user.Bar.Value++;
// await _userManager.UpdateAsync(user); //<> doesn't help
// await _signInManager.RefreshSignInAsync(user); //< doesn't help, starting to get desperate
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
信息在数据库中,可通过 SQL 访问。
但不知何故,它并没有为ApplicationUser 模型提供水分:
使用 Visual Studio 16.3.9
【问题讨论】:
-
添加了该问题的最小演示
-
外键在生成的数据库中是什么样子的?
-
外键配置可从model snapshot 获得。但请注意,这个问题已经得到解答。感谢您的帮助。
标签: c# asp.net-core asp.net-core-mvc entity-framework-core asp.net-core-identity