我有一个扩展的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上实现。
关于如何实现这一目标的任何想法?
答案 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尚不支持延迟加载,仅支持预先加载和显式加载。
希望这有帮助!