2013-07-31 11 views
5

私はEntityFrameworkを初めて使用していますが、おそらくこの質問はとてもシンプルです。私はコードを最初に使用しました。私はこのようなクラス人員を持っています:Entity Framework 4の外部キーオブジェクトの記入

public class Personnel 
{ 

    public string Id { set; get; } 
    public int Code { set; get; } 
    public string Name { set; get; } 
    public int Type { set; get; } 

    public JobTitle Title { set; get; } 
} 

とJobTitleクラス:

public class JobTitle 
{ 
    public string Id { set; get; } 
    public int Number { set; get; } 
    public string Title { set; get; } 

    public List<Personnel> Personnels { set; get; } 

} 

人事クラスの最後のプロパティはcourse..my問題の人事テーブルの外部キーである私は、すべての人員(または担当者)を取得したいときでありますラムダ式を使用するDBから。外部キーオブジェクトはヌルです。ラムダ式はlです。 IKE以下:

Context.ContextInstance.Personnels.ToList(); 

と、私はこれに式を変更した場合、外部キーオブジェクトは、それ以上をゼロではありません。

Context.ContextInstance.Personnels.Include("Title").ToList(); 

それは正しい方法?? ..ある任意のより良い方法は??あります..私はEFが自動的にそれを理解することを想定し!!!!以上1 FKがある場合は...その後、私がする必要がありますそれらのすべてにIncludeを使用しますか?私に理解を助けてください。

おかげ

+0

[Entity Framework 4でデフォルトで遅延ロードを無効にする]の可能な複製(http://stackoverflow.com/questions/2967214/disable-lazy-loading-by-default-in-entity-framework-4) –

答えて

5

これは遅延ロードによるものです。 Context.ContextInstance.Personnels.ToList();に電話すると、すべての人員がフェッチされますが、インスタンス化されるまでタイトルは取得されませんので、取得するには仮想化してください。

か、あなたがこれを行う

public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext") { 
    this.Configuration.LazyLoadingEnabled = false; 
} 

により遅延読み込みを無効にすることができますが、コンテキストからすべての関連データを取得します。クエリを実行するプロパティを指定すると、 "include"を使用してオンデマンドでロードされます。

仮想キーワードを使用すると、エンティティ・フレームワークのランタイムで、エンティティ・クラスとそのプロパティの動的プロキシーを作成し、その遅延ロードをサポートすることができます。バーチャルでない場合、遅延ロードはサポートされず、コレクションのプロパティでnullが返されます。

5

あなたJobTitleプロパティがvirtualとして定義されます場合は、使用する必要はありませんが含まれています。

ここは本当に良い説明しています:Entity Framework 4.1 Virtual Properties

関連する問題