我有一个Core 2.0项目已达到我需要开始将用户链接到我拥有的数据的程度。它起初是一个用户测试床,现在要求我每个用户有多个。
用户模型:
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);
在我的代码中,创建新的Balance时,我无法弄清楚如何链接当前登录的用户:
var myNewBalance = new Balance();
myNewBalance.User = User;
^ boom
如何将余额与当前登录的用户相关联?
答案 0 :(得分:2)
您在问题中突出显示的User
属性是属于ClaimsPrincipal
类的ControllerBase
。 User
课程的Balance
属性为ApplicationUser
,与ClaimsPrincipal
不兼容。你已经知道了这一点,但我只是明确地说明了你需要做什么。
当您在此处使用ASP.NET Core Identity时,您可以使用UserManager
类,该类可以使用依赖注入。 UserManager
包含一项功能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.
}
}
关键点是使用UserManager
的通用ApplicationUser
,然后使用GetUserAsync
(User
)属性调用ClaimsPrincipal
。