2017-02-15 50 views
0

我遇到麻煩將標題語句分解爲更有意義的內容,所以我將在我的問題中做一些細節處理。EntityFramework查詢返回關係相同的對象

我有這樣的EF查詢:

var allSocs = _db.Socs 
    .Where(x => x.Soc6 != null) 
    .Select(x => new SocModel { 
     OccupationalEmploymentStatistics = x.OccupationalEmploymentStatistics 
        .Where(y => y.GeographyId == 25 && y.Release == "2015A01" && y.Naics == "000000") 
        .OrderByDescending(z => z.AnnualWageMedian), 
     Soc6 = x.Soc6, 
     OnetSocs = x.OnetSoc, 
     Name = x.Name, 
     Description = x.Description, 
     EmploymentProjections = x.EmploymentProjections 
        .Where(y => y.GeographyId == "201400" && y.Naics == "000000") 
    }).ToList(); 

它返回的對象稱爲Soc S,誰都有一些基本屬性和三個對象屬性,OnetsocsOccupationalEmploymentStatistics,並EmploymentProjections的列表。

我遇到的問題是所有的非對象字段都正常工作,EmploymentProjectionsOnetSocs也是如此。

問題是,OccupationalEmploymentStatistics行事怪異。 EF似乎只得到一個OccupationalEmploymentStastic並將其應用於_db.Socs中的所有記錄。

如果我在_db.Socs上設置斷點和鼠標,則顯示有only one對象。但是,allSocs中有合適數量的Socs(841)。

我試着刪除OrderByDescending看看是否也許這是問題,但我仍然得到相同的行爲。

對於一些背景信息,我正在使用的表都是外部表,並且我不得不手動繪製關係,因爲EF沒有選擇它們。

編輯:一些更多的背景信息。如果我提出的另一個查詢只是 var socs = _db.Socs.ToList(),則只有第一條記錄根本沒有任何OccupationalEmploymentStatistics。沒有其他記錄有任何

回答

0

因爲EF使用身份映射模式。基本上,EF會話只會爲給定的實體和id存儲一個實例,並且只要某個實體指向相同的數據庫表和主鍵,它就會始終重複使用同一個實例。

+0

有趣..我對這個詞根本不熟悉。我如何繞過它來獲取我需要的數據? –

相關問題