【问题标题】:EF7 Identity not loading User extended propertiesEF7 身份未加载用户扩展属性
【发布时间】:2015-09-01 17:50:10
【问题描述】:

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

我的用户类实现

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

我还尝试从引用中删除 virtual 关键字,使其延迟加载,但我不确定是否已在 EF7 上实现。

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

【问题讨论】:

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


【解决方案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;
}

我还必须将属性设为“虚拟”。我的理解是 EF Core 需要能够覆盖相关对象的属性才能填充值。

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

希望这会有所帮助!

【讨论】:

  • 如果您需要深入了解多个属性(即 - 使用中间表将 a 映射到 b 的多对多关系),您可以使用 .Include(s =&gt; s.ServiceCollection).ThenInclude(sc =&gt; sc.ServiceType) 包含多个相关数据的层次。更多docs.microsoft.com/en-us/ef/core/querying/related-data
猜你喜欢
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 2023-03-21
  • 2012-08-19
  • 2023-03-22
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
相关资源
最近更新 更多