我有这堂课:
public class AppUser : IdentityUser
{
public virtual Organization Organization { get; set; }
}
当我让用户进入我的控制器操作时:
public async Task<IActionResult> MyAction()
{
var user = await GetCurrentUserAsync();
if (user != null)
{
// **user.Organization is null here**
}
return View();
}
...
private async Task<AppUser> GetCurrentUserAsync()
{
return await _userManager.FindByIdAsync(HttpContext.User.GetUserId());
}
我可以获取所有用户属性,但不能获取我添加的自定义属性。我检查了数据库,并在aspnetusers db。中为此用户设置了“组织”。
有什么想法吗?
答案 0 :(得分:0)
看起来身份框架3不支持延迟加载。除非您编写自己的FindByIdAsync
方法以急切加载所需的从属表,否则急切加载似乎不是一种选择。
将OrganizationId添加为属性
可能更容易public class AppUser : IdentityUser
{
public int OrganizationId { get; set; }
public Organization Organization { get; set; }
}
,您需要创建迁移并在更改后更新数据库
允许您在不做任何额外工作的情况下引用组织ID,例如
var orgId = user.OrganizationId;
如果要获取组织的其他非主键属性,则必须创建自己的Identity Framework 3 FindByIdAsync
方法,或者只创建单独的数据库查询。