2016-06-18 6 views
0

私はエンティティフレームワークを初めて使用しています。私は、サンプルベースで必要なすべてのデータを持つストアドプロシージャを作成することに慣れています。エンティティフレームワークを使用してリンクテーブルの値にアクセスするMVC

私は、エンティティフレームワークを使用して外部キー値を含む特定のテーブルからすべての値を取得できるという印象を受けていますが、データを結合する選択クエリを記述する必要はありません。

私は私が二つのテーブル、患者や性別を持って

@foreach (var item in Model) 
{ 
    <p> 
     @item.FirstName @item.Surname @item.Gender.GenderDesc 
    </p> 
} 

を以下している私のコントローラ私の見解では

public ActionResult Patient() 
    { 
     using (var context = new WaysToWellnessDB()) 
     { 
      var patients = context.Patients.ToList(); 
      return View(patients); 
     } 
    } 

に次き、GenderIdは私がしようとしている外部キーでありますそのテーブルからGenderDescを取得します。

私は

のObjectContextインスタンスが破棄されている次のメッセージを取得していますし、もはや接続が必要な操作のために使用することはできません。

GenderDescにアクセスできない理由を説明できる人がいますか。私のコンテキストでusing()を削除してもうまくいきますが、実際にそのままにしておきたいのではありません。

ありがとうございます。

答えて

1

正しいですが、あなたはusingステートメントの中にあるようにコンテキストを破棄しています。それ以来アクセスしようとするものはすべて遅延ロードできません。遅延読み込みの欠点は、反復処理中のすべての患者の性別のクエリを実行することです。これは便利ですが、悪いことです。 Includeを使用してクエリ時に関連するテーブルをロードします。

あなたは新しいインポート必要があります

using System.Data.Entity; 

をそして関連するテーブルが含まれています。あなたの「ジェンダー」のテーブルとあなたに参加しますクエリになります

var patients = context.Patients.Include(p => p.Gender).ToList(); 

あなたのビューに item.Gender.GenderDescを出力できるはずです。

+0

伝説これは私が必要としていたものです。 – user3284707

関連する問題