只有两个最简单的表A和B,其中A包含许多B,如下表所示。然后我创建200的B记录并将它们添加到一个A.现在,如果我重新启动程序并执行if(a.Bs == null)代码行,如下所示,它将花费120秒!!
我不认为20000记录对EF来说是件大事,那么有没有人可以帮助我解决这个性能问题?
public class A
{
[Key]
public int EntityId { get; set; }
public virtual ICollection<B> Bs { get; set; }
}
public class B
{
[Key]
public int EntityId { get; set; }
public virtual A A { get; set; }
}
////////////上下文是://///////////////
public class MyDbContext : DbContext
{
public MyDbContext()
: base("MyDbContext")
{
}
public DbSet<A> As { get; set; }
public DbSet<B> Bs { get; set; }
}
///////////性能问题如下//////////////
using (var db = new MyDbContext())
{
var a = db.As.First();
if (a.Bs == null)\\This line will cost about 120 seconds!!!!!!
{}
}
答案 0 :(得分:0)
在您的代码中,当您访问a.Bs时,所有集合都已实现(通过延迟加载程序)并且20.000记录实现需要花费大量时间。另外,我认为a.Bs永远不会为空 如果您不需要在内存中加载B,您可以找到另一种方法进行检查,即
if (a.Bs.Count() == 0) {}