Entity Framework最基本操作的性能问题
两张最简单的表A和B,A到B是一对多的关系,Code First的Class如下。当我往A里加了20000个B之后,断掉链接,然后重新启动程序,发现当我判断a.Bs是否等于null的时候,居然耗时2分钟,如果A里有40000个B,时间将会达到15分钟,请问各位大侠们,我是哪里用错了吗?这种关系的最佳实践是什么?
据我分析,数据库端没有任何压力,压力全部来自代理类的生成,CPU有25%的消耗。然而当我设置db.Configuration.ProxyCreationEnabled = false; 禁掉代理类生成时,语句瞬间返回,但是是null。
请各位大侠帮忙看看,先谢谢了!
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; }
}
////////////Context 如下://///////////////
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)//这一句将耗时2分钟
{}
}