使用带有EF Core的UserManager进行预先加载

Rob*_*eia 11 c# entity-framework-core asp.net-core

目前有ApplicationUser类具有一些自定义属性,如:

public class ApplicationUser : IdentityUser
{
    public string Name { get; set; }
    public List<Content> Content { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想让当前登录的用户获得相关数据列表(Content属性).

在我的控制器中,如果我把:

Applicationuser user = await _userManager.GetUserAsync(HttpContext.User);
Run Code Online (Sandbox Code Playgroud)

我得到了登录用户,但没有任何相关数据.但是,如果我使用ApplicationDbContext下面的检索当前用户,我可以检索相关数据:

ApplicationUser user = await _userManager.GetUserAsync(HttpContext.User);
ApplicationUser userWithContent = _context.Users.Include(c => c.Content).Where(u => u.Id == user.Id).ToList();
Run Code Online (Sandbox Code Playgroud)

但这对我来说似乎不正确!

任何的想法?

Riz*_*iza 3

检查 的源代码[UserManager][1], GetUserAsync 最终将调用FindByIdAsync,这将由实现提供IUserStore。查看问题中的源代码,很可能使用 EFCore 作为 IUserStore 实现。

对于 EFCore,这里提到Find不能与 结合使用include,所以我猜想您在问题中做了什么来进行急切加载,实际上可能是正确的。