2012-08-22 21 views
8

私はコードファーストでEF 5を使用しています。私は常にいくつかのプロパティを読み込もうとするクラスを持っています。私は仮想キーワードを削除しますが、それは熱心ロードではありません。EFコード最初に強制的に読み込みを行う

public class Person 
{ 
    public ICollection<Email> Emails { get; set; } 
    public Profile Profile {get;set;} 
} 

だから、遅延読み込みをオフにすることによって、それは自動熱心負荷右ではないだろうか?もしそうなら、Include()を使わないでアーカイブするには?

ありがとうございます!

答えて

18

いいえ、virtualキーワードを削除して遅延読み込みをオフにしても、自動的に読み込みが有効になるわけではありません。あなたはそのような関連EntityまたはCollectionIncludeする必要があります。リンクのhttp://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

+0

おかげで、それは非常に便利です:

var personWithProfile = ctx.People.Include(x => x.Profile).First(); var personWithProfileAndEmails = ctx.People. .Include(x => x.Profile) .Include(x => x.Emails) .First(); 

これは、ADO.NETチームのブログからの偉大な読み取りです。私はIncludeコマンドを認識しています。しかし、POCOクラスの定義(またはマッピングファイル)の読み込みを強制的に強制する方法はありませんか? – Calvin

+1

いいえ、データを熱心に読み込むときにEFに明示的に伝える必要があります。 EFが関係するすべてのエンティティを含むだけであれば、パフォーマンス上の大きな問題が発生します。本質的に、すべてのインクルード・ステートメントはSQLの「内部結合」に変換され、問合せは結合された表のすべての列も選択します。 – Paul

+0

説明をありがとう! – Calvin

関連する問題