2017-02-15 2 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いくつかの原始的な性質と3つのオブジェクトのプロパティを持っているの、OnetsocsOccupationalEmploymentStatistics、およびEmploymentProjectionsと呼ばれるオブジェクトのリストを返します。

私が行っている動作は、EmploymentProjectionsOnetSocsのように、すべての非オブジェクトフィールドが正常に動作しているということです。

問題はOccupationalEmploymentStatisticsが奇妙なことです。 EFはを1つだけOccupationalEmploymentStasticとし、_db.Socsのすべてのレコードに適用しているようです。

_db.Socsにブレークポイントとマウスを設定すると、only oneオブジェクトがあることがわかります。しかし、allSocsには適切な数のSocsがあります(841)。

私はOrderByDescendingを削除してみましたが、それが問題であるかどうかを確認しようとしましたが、まだ同じ動作が発生しています。

私が扱っているテーブルは、すべて外部テーブルです。私はEFがそれらを拾わなかったので、手動で関係を描く必要がありました。

EDIT:もう少し背景情報。 var socs = _db.Socs.ToList()という別のクエリを作成した場合、最初のレコードのみがOccupationalEmploymentStatisticsになります。他のレコードはありません

答えて

0

EFはアイデンティティマップパターンを使用しているためです。基本的に、EFセッションは特定のエンティティとIDに対して1つのインスタンスのみを格納し、同じエンティティと同じDBテーブルと主キーを指している場合は常に同じインスタンスを再利用します。

+0

興味深い...私はその言葉に全く慣れていません。必要なデータを得るにはどうすればよいですか? –

関連する問題