将身份用户与实体框架包括在内并不起作用

时间:2015-09-29 12:08:37

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

我在查询结果中包含我的身份用户时遇到问题。其他实体都包括在内,无论多少级别都很好。

这是我正在使用的模型。

Building * --- 1 City
     *            *
     |          /
     |         /
     1        1
ApplicationUser

上下文:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public DbSet<City> Cities { get; set; }
    public DbSet<Building> Buildings { get; set; }
}

BuildingCity都有以下属性:

public Guid ApplicationUserId { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }

我用来检索数据的查询:

var building = context.Buildings
    .Include(c => c.ApplicationUser)
    .Include(c => c.City)
    .Include(c => c.City.ApplicationUser)
    .First();

在结果中,城市填充得很好,但是ApplicationUser不是。

这可能是一个命名问题吗?我已经尝试UserId / UserAspNetUserId / AspNetUser作为属性名称而没有成功。

我使用迁移来创建数据库。为用户创建的表名是AspNetUsers。

我使用的是实体框架7 beta 7,不确定这是否也适用于其他版本。

这些是由EF Migrations生成的文件。

ApplicationDbContextModelSnapshot.cs

20150929181902_Init.cs

20150929181902_Init.Designer.cs

(我注意到在生成要上传的文件时忘记包含Building&gt; City关系,但这不应该对示例有用)

2 个答案:

答案 0 :(得分:0)

我终于明白了。

ApplicationUser继承自IdentityUser继承的IdentityUser<string>。泛型类型用作主键,因此string

我将Guid外键属性更改为string,现在一切正常。

答案 1 :(得分:0)

只是为了帮助任何也有类似问题的人。我面临着同样的事情,同样的场景:我的自定义身份用户有一些相关的实体并且使用 .Include 不起作用。他们谁也不会回来。但他们曾经这样做过。

原来我创建了一个自定义 ApplicationUserStore 来自动包含检索用户时通常需要的实体,但我只覆盖了 FindByIdAsync 方法。当我尝试使用 FindByNameAsync 时,显然没有实体会回来。只需覆盖此方法和其他 Find 方法。