Entity Framework最基本操作的性能问题

capcom923 2015-11-15 04:59:10
两张最简单的表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分钟
{}
}
...全文
53 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧