包含具有 Entity Framework 的身份用户不起作用
Including Identity User with Entity Framework doesn't work
我在查询结果中包含我的身份用户时遇到问题。其他实体被包含得很好,无论深度有多少层。
这是我使用的模型。
Building * --- 1 City
* *
| /
| /
1 1
ApplicationUser
以及上下文:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<City> Cities { get; set; }
public DbSet<Building> Buildings { get; set; }
}
Building
和 City
都具有这些属性:
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();
结果 City 填充得很好,但是 ApplicationUser 不是。
会不会是命名问题?我已经尝试 UserId
/ User
和 AspNetUserId
/ AspNetUser
作为 属性 名称但没有成功。
我正在使用迁移来创建数据库。为用户创建的 table 名称是 AspNetUsers。
我正在使用 entity framework 7 beta 7,不确定这是否也适用于其他版本。
这些是由 EF 迁移生成的文件。
ApplicationDbContextModelSnapshot.cs
20150929181902_Init.Designer.cs
(我注意到我在生成要上传的文件时忘记包含建筑 > 城市关系,但这对于示例来说应该无关紧要)
我终于想通了。
ApplicationUser
继承自 IdentityUser
,后者继承自 IdentityUser<string>
。泛型用作主键,所以 string
!
我将 Guid
外键属性更改为 string
s,现在一切正常。
只是为了帮助也有类似问题的人。我面临着同样的事情,同样的场景:我的自定义身份用户有一些相关实体并且使用 .Include 不起作用。 None 他们会回来。但他们曾经。
原来我已经创建了一个自定义的 ApplicationUserStore 来自动包含我在检索用户时通常总是需要的实体,但我只是重写了 FindByIdAsync 方法。显然,当我尝试使用 FindByNameAsync 时,没有实体会返回。只需覆盖此方法和其他 Find 方法。
我在查询结果中包含我的身份用户时遇到问题。其他实体被包含得很好,无论深度有多少层。
这是我使用的模型。
Building * --- 1 City
* *
| /
| /
1 1
ApplicationUser
以及上下文:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<City> Cities { get; set; }
public DbSet<Building> Buildings { get; set; }
}
Building
和 City
都具有这些属性:
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();
结果 City 填充得很好,但是 ApplicationUser 不是。
会不会是命名问题?我已经尝试 UserId
/ User
和 AspNetUserId
/ AspNetUser
作为 属性 名称但没有成功。
我正在使用迁移来创建数据库。为用户创建的 table 名称是 AspNetUsers。
我正在使用 entity framework 7 beta 7,不确定这是否也适用于其他版本。
这些是由 EF 迁移生成的文件。
ApplicationDbContextModelSnapshot.cs
20150929181902_Init.Designer.cs
(我注意到我在生成要上传的文件时忘记包含建筑 > 城市关系,但这对于示例来说应该无关紧要)
我终于想通了。
ApplicationUser
继承自 IdentityUser
,后者继承自 IdentityUser<string>
。泛型用作主键,所以 string
!
我将 Guid
外键属性更改为 string
s,现在一切正常。
只是为了帮助也有类似问题的人。我面临着同样的事情,同样的场景:我的自定义身份用户有一些相关实体并且使用 .Include 不起作用。 None 他们会回来。但他们曾经。
原来我已经创建了一个自定义的 ApplicationUserStore 来自动包含我在检索用户时通常总是需要的实体,但我只是重写了 FindByIdAsync 方法。显然,当我尝试使用 FindByNameAsync 时,没有实体会返回。只需覆盖此方法和其他 Find 方法。