将代码优先与 .NET Core 2.0 中的 Identity ApplicationUser 相关联
Relate Code-First to Identity ApplicationUser in .NET Core 2.0
我有一个 Core 2.0 项目,它已经到了我需要开始 link 让用户访问我拥有的数据的地步。它最初是一个用户测试平台,现在要求我为每个用户提供多个测试平台。
用户模型:
public class ApplicationUser : IdentityUser
{
public virtual ICollection<Balance> Balances { get; set; }
}
平衡模型:
public virtual ApplicationUser User { get; set; }
...
ApplicationDbContext.cs:
//Users to balances
builder.Entity<ApplicationUser>()
.HasMany(b => b.Balances)
.WithOne(u => u.User);
在我的代码中,当创建新余额时,我不知道如何 link 我当前登录的用户:
var myNewBalance = new Balance();
myNewBalance.User = User;
^ boom
如何将余额关联到当前登录的用户?
您在问题中突出显示的 User
属性 是属于 ControllerBase
class 的 ClaimsPrincipal
。 Balance
class 上的 User
属性 是 ApplicationUser
,与 ClaimsPrincipal
不兼容。您已经知道这一点,但我只是将其明确说明以解释您需要做什么。
因为你在这里使用ASP.NET Core Identity,你可以使用UserManager
class, which is available using dependency injection. UserManager
contains a function, GetUserAsync
,它可以将你的ClaimsPrincipal
转换成对应的ApplicationUser
。
这是一些代码:
public class SomeController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
public SomeController(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
public async Task<IActionResult> SomeAction()
{
var myNewBalance = new Balance();
myNewBalance.User = await _userManager.GetUserAsync(User);
return View(); // etc, etc.
}
}
关键点是使用使用 ApplicationUser
的泛型 UserManager
,然后使用 User
(ClaimsPrincipal
) 调用 GetUserAsync
属性.
我有一个 Core 2.0 项目,它已经到了我需要开始 link 让用户访问我拥有的数据的地步。它最初是一个用户测试平台,现在要求我为每个用户提供多个测试平台。
用户模型:
public class ApplicationUser : IdentityUser
{
public virtual ICollection<Balance> Balances { get; set; }
}
平衡模型:
public virtual ApplicationUser User { get; set; }
...
ApplicationDbContext.cs:
//Users to balances
builder.Entity<ApplicationUser>()
.HasMany(b => b.Balances)
.WithOne(u => u.User);
在我的代码中,当创建新余额时,我不知道如何 link 我当前登录的用户:
var myNewBalance = new Balance();
myNewBalance.User = User;
^ boom
如何将余额关联到当前登录的用户?
您在问题中突出显示的 User
属性 是属于 ControllerBase
class 的 ClaimsPrincipal
。 Balance
class 上的 User
属性 是 ApplicationUser
,与 ClaimsPrincipal
不兼容。您已经知道这一点,但我只是将其明确说明以解释您需要做什么。
因为你在这里使用ASP.NET Core Identity,你可以使用UserManager
class, which is available using dependency injection. UserManager
contains a function, GetUserAsync
,它可以将你的ClaimsPrincipal
转换成对应的ApplicationUser
。
这是一些代码:
public class SomeController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
public SomeController(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
public async Task<IActionResult> SomeAction()
{
var myNewBalance = new Balance();
myNewBalance.User = await _userManager.GetUserAsync(User);
return View(); // etc, etc.
}
}
关键点是使用使用 ApplicationUser
的泛型 UserManager
,然后使用 User
(ClaimsPrincipal
) 调用 GetUserAsync
属性.