我如何告诉 UserManager.FindByNameAsync 包含关系?

How do I tell UserManager.FindByNameAsync to include a relation?

我正在使用 ASP.NET Identity 2.2.0 与 ASP.NET MVC 5.2.3 和 Entity Framework 6.1.2.

我使用 ASP.NET Identity with Code First 添加了一个新的 属性 及其对应的 table 到我的数据库,如下所示:

public class ApplicationUser
{
  [ForeignKey("UserTypeId")]
  public UserType Type { get; set;}
  public int UserTypeId { get; set;} 
}

public class UserType
{
  [Key]
  public int Id { get; set;}

  public string Name { get; set; }
}

现在,通过某些操作,当我调用时:

var user = UserManager.FindByNameAsync(userName);

它确实为用户提供了正确的 UserTypeId,因为那是一个原语,但它没有获得 ApplicationUser [=41] 的 UserType 属性 =].

如果我不使用这个抽象,我会调用 LoadProperty<T> 或 Entity Framework 中的 Include 方法来包含导航 属性 或名为 [= ApplicationUser class.

上的 18=](UserType 类型)

如何使用 ASP.NET 身份的 UserManager 做到这一点?我怀疑唯一的方法是在我的自定义 UserManager 派生 class 中覆盖此方法并自己完成?

使用Entity Framework延迟加载,您需要确保您的导航属性被标记为virtual

public class ApplicationUser
{
    [ForeignKey("UserTypeId")]
    public virtual UserType Type { get; set;}
    public int UserTypeId { get; set;} 
}

或者,如果您unable/don不想使用延迟加载,那么您仍然可以像使用任何其他实体一样使用您的上下文:

var user = context.Users.Include(u => u.Type).Single(u => u.UserName == userName);