加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

entity-framework – 如何告诉UserManager.FindByNameAsync包含

发布时间:2020-12-16 06:39:26 所属栏目:asp.Net 来源:网络整理
导读:我使用ASP.NET Identity 2.2.0与ASP.NET MVC 5.2.3和Entity Framework 6.1.2. 我使用带有Code First的ASP.NET Identity将一个新属性及其相应的表添加到我的数据库中,如下所示: public class ApplicationUser{ [ForeignKey("UserTypeId")] public UserType T
我使用ASP.NET Identity 2.2.0与ASP.NET MVC 5.2.3和Entity Framework 6.1.2.

我使用带有Code First的ASP.NET Identity将一个新属性及其相应的表添加到我的数据库中,如下所示:

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 Identity的UserManager执行此操作?我怀疑唯一的方法是在我的自定义UserManager派生类中重写此方法并自己执行此操作?

解决方法

使用实体框架延迟加载,您需要确保将导航属性标记为虚拟.

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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读