实体框架5 - 按计数加载所有行

时间:2013-07-24 12:40:54

标签: c# entity-framework-5

我有一张超过一百万行的大桌子。

简单:

public partial class Country
{
    public Country()
    {
        this.Streets = new HashSet<Streets>();
    }

    public int Id { get; set; }
    public virtual ICollection<Street> Streets { get; set; }
}

public partial class Street
{
    public int Id { get; set; }
    public int CountryId { get; set; }
    public virtual Country Country { get; set; }
}

如果我想获得一个国家的街道总数,我可以做到

context.CountryStreets.Count(v=>v.CountryId == X)

EF为您提供了一种使用延迟加载访问相关表的简便方法:

Country.Streets.Count()

这种方法非常简单但是......由于某种原因,它正在加载总相关表。

为什么呢?我怎样才能改变这种行为?

提前致谢

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

  1. 为什么呢?

    因为它不是为此目的而制作的。

  2. 我该如何改变这种行为?

    你真的不能 - 只有你开始搞乱表达提供者。

  3. 注意:

    如果我们检索50条记录并且在每一行上我们都会“计数”,那么我们将向MSSQL发出超过50条(!)的请求,结果是非常糟糕的。

    最好的解决方案是做这样的事情:

    ct.Country.Select(v => new { Country = v, TotalStreets = v.Streets.Count() });
    

    请注意,只有一个请求。