2013-07-24 44 views
1

我有一個非常大的表,有超過一百萬行。實體框架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() 

此方法非常好,很容易,但...由於某些原因,它加載的總關聯d表。

爲什麼?我該如何改變這種行爲?

在此先感謝

回答

0
  1. 爲什麼?

    因爲它不是爲此目的而設計的。

  2. 我該如何改變這種行爲?

    你真的不能 - 只有當你開始混淆表達式提供者。

要注意:

如果我們檢索50條記錄,並在每一行,我們做「數」,我們將有超過50個請求,以MSSQL,作爲一個結果 - 非常糟糕的(!)性能。

最好的解決辦法是做這樣的事情:

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

請也不是說只有一個請求。