我如何告诉 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);
我正在使用 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.
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);