为什么使用双向关系时EF Code First性能会急剧下降?

时间:2014-01-08 14:05:24

标签: c# entity-framework ef-code-first entity-framework-5

我很难弄清楚如何标题这个问题,因为问题真的很奇怪。

我对现有数据库实体框架类有一个Code First。让我们将它们限制在两个相关的位置:

public class Product
{
    public int ProductId { get; set; }
    public string Code { get; set; }
    public string Name { get; set; }

    public virtual Group Group { get; set; }
}

public class Group
{
    public int GroupId { get; set; }
    public string Code { get; set; }
    public string Name { get; set; }

    //public virtual ICollection<Product> Products { get; set; } 
}

现在我运行代码

using(var context = _contextFactory.GetContext())
{
    var t1 = context.Groups.ToList();
    var t2 = context.Products.ToList();
}

它运行得很好,在几秒钟内填充列表(产品表非常大)。

但如果我取消注释评论行,就会发生奇怪的事情。像往常一样填充t1t2需要花费数十倍的时间。如果我交换t1t2分配,那么t2会快速运行,t1会运行很长时间。

在我看来,EF在幕后Context做了一些事情,并且在某种程度上存在这种关系的问题。其他人有这个问题或知道解释?我现在使用EF已经很长时间了,从来没有看到过这种行为。

在SQL数据库中,ProductGroup之间存在关联。

0 个答案:

没有答案