C# 实体框架核心 .包含() 问题



我在实体框架的"Include(("函数上遇到了问题

使用的框架:.NET Core 3.1 和实体框架核心 3.1.5

这些是我的实体

public class EntityA
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

[Required]
[Index(IsUnique = true)]
public int EntityBId { get; set; }
[ForeignKey("EntityBId")]
public EntityB EntityB { get; set; }
[DefaultValue(false)]
public bool IsConfirmed { get; set; }
}
public class EntityB
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Title { get; set; }

public string Description { get; set; }
}

所以我启动这个查询:

public ICollection<EntityA> GetAll(string contextName)
{
DbContext context = GetContext(contextName);
ICollection<EntityA> collection = context.EntityAs
.Include(j => j.EntityB)
.Where(x => x.IsConfirmed)
.ToList();
return collection;
}
private DbContext GetContext(string contextName)
{
string contextDbConnectionString = _secretsRepository.GetDbConnectionString(contextName);
DbContextOptionsBuilder<DbContext> optionsBuilder = new DbContextOptionsBuilder<DbContext>();
optionsBuilder.UseSqlServer(contextDbConnectionString);
return new DbContext(optionsBuilder.Options);
}

查询结果如下:

{
Id: 5
IsConfirmed: true
EntityB: null
EntityBId: 72
}

我不明白的是为什么"包含(j => j.EntityB("没有返回正确值的实体 B 字段

当我尝试使用提供的实体构建数据模型时,我在 Index 属性处遇到了编译错误。

[Required]
[Index(IsUnique = true)]
public int EntityBId { get; set; }

事实证明,实体框架6 库曾经具有该属性,但问题涉及实体框架核心。因此,我只是删除了 Index 属性并将其移动到 OnModelCreate 方法以模拟类似的行为。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<EntityA>().HasIndex(u => u.EntityBId).IsUnique();
}

有了这个,我应用代码优先方法来生成数据库并运行程序。执行时,ef core 生成了正确的查询:

SELECT [e].[Id], [e].[EntityBId], [e].[IsConfirmed], [e0].[Id], [e0].[Description], 
[e0].[Title]
FROM [EntityAs] AS [e]
INNER JOIN [EntityBs] AS [e0] ON [e].[EntityBId] = [e0].[Id]
WHERE [e].[IsConfirmed] = CAST(1 AS bit)

希望它有助于解决您的问题。

最新更新