1

我有一个非常大的表,超过一百万行。

简单的:

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()

这种方法非常好用且简单,但是……由于某种原因,它正在加载全部相关表。

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

提前致谢

4

2 回答 2

0

看看这两个链接,它们可能对您的问题有所帮助:

如何在不加载内容的情况下计算 EntityFramework 中的行?

http://msdn.microsoft.com/en-us/data/jj574232.aspx

于 2013-07-24T12:47:17.540 回答
0
  1. 为什么?

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

  2. 我怎样才能改变这种行为?

    你真的不能——只有当你开始弄乱表达式提供程序时。

要注意:

如果我们检索 50 条记录并在每一行上进行“计数”,我们将收到超过 50 个(!)对 MSSQL 的请求,结果 - 性能非常差。

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

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

请注意,只有一个请求。

于 2013-07-25T08:13:34.480 回答