将Entity Framework Core查询与.include()配合使用以急于加载子数据会导致SQL Server超时

时间:2018-08-02 13:41:18

标签: sql-server entity-framework-core

我有一个具有父/子实体关系的Entity Framework Core 2.1项目。当我对父表执行查询时,结果几乎立即返回。当我尝试Context.Parents.Include(parent => parent.Children)时,查询似乎可以在服务器上正确执行(通过查看SQL Server Profiler输出),但是应用程序代码在20秒后得到了超时异常。这是一个很小的数据集(父表中有约20条记录,子表中有约100条记录),因此不应有任何实际的性能问题。有人知道我在做什么错吗?我怀疑我配置了错误的上下文,但是不确定。

编辑
这是我的课程:

public partial class A
{
    public int Id { get; set; }
    public bool Active { get; set; }
    public ICollection<B> BItems { get; set; }
}

public partial class B
{
    public int Id { get; set; }
    public int AId { get; set; }
    public A AItem { get; set; }
}

public partial class Context
{
    public virtual DbSet<A> A { get; set; }
    public virtual DbSet<B> B { get; set; }
    protected override OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<B>(entity =>
        {
            // Other field setup, unrelated to relationship...

            entity.HasOne(b => b.A)
                .WithMany(a => a.BItems)
                .HasForeignKey(b => b.AId)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("FK_ConstraintName");
        });

        modelBuilder.Entity<A>(entity =>
        {
             // Other field setup, unrelated to relationship
        });
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlServer(...connection string from configuration goes here...);
        }
    }
}

我的用法代码如下:

var results = await context.A
    .Include(a => a.BItems)
    .Where(a => a.Active)
    .ToListAsync();

我正在针对SQL Server 2016使用EF Core 2.1。我看到在SQL Server Profiler中执行了2个查询。一个用于查询A记录,另一个用于查询针对A表INNER JOIN的B记录。

1 个答案:

答案 0 :(得分:0)

随着时间的流逝,此问题得以解决,我不确定是怎么做的。我怀疑的一部分与硬件有关,因为我们在局域网上还有其他本地问题,在进行该项目时,它们以其他方式表现出来。