我有一个具有父/子实体关系的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记录。
答案 0 :(得分:0)
随着时间的流逝,此问题得以解决,我不确定是怎么做的。我怀疑的一部分与硬件有关,因为我们在局域网上还有其他本地问题,在进行该项目时,它们以其他方式表现出来。