EF7标识未加载用户扩展属性

时间:2015-06-16 18:37:20

标签: asp.net-identity asp.net-core entity-framework-core

我有一个扩展的IdentityUser类,它包含对我的数据库中另一个实体的引用,但每当我尝试使用UserManager获取User时,引用的实体总是为空:

我的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上实现。

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

1 个答案:

答案 0 :(得分:1)

我也遇到了这个问题,并在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;
}

我不得不把这个房产变成虚拟的&#34;同样。我的理解是EF Core需要能够覆盖相关对象的属性以填充值。

此外,截至本发布日期,EF Core尚不支持延迟加载,仅支持预先加载和显式加载。

希望这有帮助!