Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C实体框架核心.Include()问题_C#_Entity Framework Core 3.1 - Fatal编程技术网

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

C# C实体框架核心.Include()问题,c#,entity-framework-core-3.1,C#,Entity Framework Core 3.1,实体框架的Include函数有问题 使用的框架:.NET Core 3.1和实体框架Core 3.1.5 这些是我的实体 public class EntityA { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } [Required] [Index(IsUnique = true)] public int En

实体框架的Include函数有问题

使用的框架:.NET Core 3.1和实体框架Core 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);
}

我不明白的是,Includej=>j.EntityB为什么没有返回正确值的EntityB字段

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

[Required]
[Index(IsUnique = true)]
public int EntityBId { get; set; }
原来EntityFramework6库曾经具有该属性,但问题涉及EntityFrameworkCore。所以我只是删除了Index属性,并将其移动到OnModelCreating方法以模拟类似的行为

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

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

尝试将EntityB标记为虚拟,因此公共虚拟EntityB EntityB{get;set}请检查生成的SQL以开始。它包括实体B吗?@MindSwipe我按你说的做了尝试,但什么都没有changed@TomTom我已经看过了,但生成的查询结果如下:从[EntityAs]中选择[p].[Id],[p].[IsConfiged],[p].[EntityBId]作为[p],此处[p].[IsConfiged]=CAST1作为bitOk,因此EfCore没有生成SQL。您的DbContext没有正确注册元数据,因此永远不会解析关系。查看如何正确配置DbContext。谢谢,这解决了我的问题,我的问题是由于实体框架6库和实体框架核心库
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<EntityA>().HasIndex(u => u.EntityBId).IsUnique();
}
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)