如何在OnGetAsync方法中使用Identity UserId查询数据库中的条目



所以我有一个Razor页面web应用程序,我目前正在使用最新版本的EF Core、ASP.NET、ASP.NET Identity等进行开发。

我想做的是使用我的一个Razor页面的OnGetAsync方法获取我的当前登录用户,但我也只想检索登录用户创建的最新数据条目,以便与我的Razor page.cs.html文件一起显示。

我已经尝试过在stackoverflow和其他地方实现UserManager技术,但在我的代码行中,我将登录的用户与有问题的db实体表的userid列进行比较时,不断出现以下2个错误:

使用以下代码设置

public async Task<IActionResult> OnGetAsync()
{
var userId = await _userManager.GetUserAsync(User);
string UserId = Convert.ToString(userId);

if (UserId == null)
{
return NotFound();
}
ForecastCinema = await _context.ForecastsCinema
.Where(f => f.UserId == userId);
}

"运算符'=='不能应用于'string'和'AppUser'类型的操作数">

AppUser是我的数据库中.Net Identity 的User表的名称

对于另一种类型的代码格式,下方的另一个错误

public async Task<IActionResult> OnGetAsync()
{
var userId = await _userManager.GetUserAsync(User);
string UserId = Convert.ToString(userId);

if (UserId == null)
{
return NotFound();
}
ForecastCinema = await _context.ForecastsCinema
.Where(f => f.UserId == UserId);
}

"IQueryable不包含'GetAwaiter'的定义,并且找不到接受'IQueryable'类型的第一个参数的可访问扩展方法'GetAwaitr'(是否缺少using指令或程序集引用?(">

有人能帮我看看这里发生了什么事吗?我尝试过将UserManager声明"转换"为字符串,但没有成功,它不起作用。我在下面附上了有问题的方法的代码供参考。提前感谢各位程序员的帮助和见解:(

"运算符'=='不能应用于'string'和'AppUser'类型的操作数">

我认为,正如错误消息所说,这实际上意味着您正在使用==比较两种类型。

我看到的第一件事是,你正在将f.UserId与你从获得的UserId进行比较

await _userManager.GetUserAsync(User);

这似乎给了你用户对象,而不仅仅是Id。

"IQueryable不包含'GetAwaiter'的定义,也找不到接受'IQueryable'类型的第一个参数的可访问扩展方法'GetAwaitr'(是否缺少using指令或程序集引用?(">

正如错误消息所说,它不是异步任务类型,因此您不能在它前面使用"等待"。请尝试不等待来查询结果。我相信这是指这个代码:

await _context.ForecastsCinema
.Where(f => f.UserId == UserId);

最新更新