我如何告诉UserManager.FindByNameAsync来包含一个关系



我使用的是ASP。. NET Identity 2.2.0. NET MVC 5.2.3和实体框架6.1.2.

我添加了一个新的属性和它对应的表到我的数据库使用ASP。. NET标识代码首先如下:

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类的UserType属性。

如果我不使用这个抽象,我将在实体框架中调用LoadProperty<T>Include方法,以在ApplicationUser类中包含名为Type(类型为UserType)的导航属性或关系。

我如何用ASP做到这一点?. NET身份的UserManager ?我怀疑唯一的方法是在我的自定义UserManager派生类中重写此方法并自己执行?

使用实体框架延迟加载,您需要确保您的导航属性被标记为virtual

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

或者,如果你不能或不想使用延迟加载,那么你仍然可以像使用其他实体一样使用你的上下文:

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

相关内容

  • 没有找到相关文章

最新更新