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

asp.net-identity – EF7标识不加载用户扩展属性

发布时间:2020-12-16 09:41:24 所属栏目:asp.Net 来源:网络整理
导读:我有一个扩展的IdentityUser类,它包含对我的数据库中另一个实体的引用,但每当我尝试使用UserManager获取用户时,引用的实体总是为空: 我的User类的实现 public class Usuario : IdentityUser{ public int ClienteID { get; set; } public virtual Cliente Cl
我有一个扩展的IdentityUser类,它包含对我的数据库中另一个实体的引用,但每当我尝试使用UserManager获取用户时,引用的实体总是为空:

我的User类的实现

public class Usuario : IdentityUser
{
    public int ClienteID { get; set; }
    public virtual Cliente Cliente { get; set; }
}

使用用户引用属性的控制器

[Authorize]
[HttpGet]
public async Task<Direccion> GET()
{
    var usuario = await UserManager.FindByNameAsync(Context.User.Identity.Name);
    // Cliente will always be null
    return usuario.Cliente.Direccion;
}

我也尝试从引用中删除虚拟关键字,因此它是延迟加载的,但我不确定它是否已在EF7上实现.

关于如何实现这一点的任何想法?

解决方法

我也遇到了这个问题,并在 EF Core Documentation的帮助下解决了这个问题.您需要使用Include方法来填充相关数据.就我而言:

实体类:

public class ServiceEntity
{
    public int ServiceId { get; set; }
    public int ServiceTypeId { get; set; }

    public virtual ServiceTypeEntity ServiceType { get; set; } 

}

访问我的DbContext对象:

public ServiceEntity GetById(int id)
{
    var service = this.DbClient.Services.Include(s => s.ServiceType).Where(c => c.ServiceId == id).FirstOrDefault();

    return service;
}

我不得不将该属性设为“虚拟”.我的理解是EF Core需要能够覆盖相关对象的属性以填充值.

此外,截至本发布日期,EF Core尚不支持延迟加载,仅支持Eager Loading和Explicit Loading.

希望这可以帮助!

(编辑:李大同)

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

    推荐文章
      热点阅读