asp.net 5自定义IdentityUser属性为null

时间:2015-12-29 02:41:09

标签: asp.net-core-mvc entity-framework-core

我有这堂课:

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。中为此用户设置了“组织”。

有什么想法吗?

1 个答案:

答案 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方法,或者只创建单独的数据库查询。