2011-11-10 14 views
4

私はEFを経験していないので、質問の関連性は分かりません。 Student(StudentId、Name、Username、Address、DOB、DeptId、NavigationProp1Id ....)テーブルとDepatementテーブル(Deptd、DeptName、NavigationProPid)テーブルがあるとします。したがって、テーブル構造がこのように続く場合、私は 'contex.Studnets'を使うとナビゲーションプロパティを含むすべてのプロパティを取得でき、テーブル2に他のナビゲーションプロパティがあれば読み込むこともできます。私は正しいですか?エンティティフレームワーク - 選択したプロパティのみをロード

パフォーマンス上の問題が発生するかどうかは関係ありませんか? UserName、StudresのAddresなどのエンティティから選択したプロパティのみを読み込むことはできますか?

すべてのヘルプは大ませナビゲーションプロパティはすぐにロードされていないされていません

のthnxとよろしく

ボニー

答えて

16

を理解されるであろう。それらは、Includeメソッドを使用すると明示的にロードされるか、初めてアクセスするときに遅延してロードされます(デバッガでのアクセス=デバッガによるアクセスが遅延ロードの原因となります)。

選択したプロパティのみを読み込むことができます。これは投影と呼ばれます。プロパティのサブセットでStudentエンティティを読み込むことができないという制限があります。あなたは、新しいクラスや匿名型のいずれかが必要になります。

var query = context.Students.Select(x => new 
       { 
        x.UserName, 
        x.Address 
       }); 
0

Entity Frameworkの(EF)を使用する場合は、あなたの最善の解決策は、LINQ(http://msdn.microsoft.com/en-us/library/bb308959.aspx)を使用して、EFコンテキストを照会することです。 LINQは関係全体に照会するために使用することができますので、あなたのシナリオでは、あなたのコードは次のようになります。

var joinedlist = context.Student.Join(
       // The table we wish to join to the Student table 
       context.Department, 
       // Item on student table we want to join from 
       studentItem => studentItem.DeptId, 
       // Item on department table we want to join to 
       departmentItem => departmentItem.Deptd, 
       // New object just holding the values we wish to retrieve from the joined tables 
       (studentItem, departmentItem) => new { 
         StudentId = studentItem.StudentId, 
         StudentUsername = studentItem.Username, 
         StudentAddress = studentItem.Address, 
         DepartmentName = departmentItem.DeptName, 
         Navigation = StudentItem.NavigationProp1Id 
        } 
      ); 

上記のコードは、あなたのための照会可能なリストを生成しますが、あなたは、LINQでより多くのことを行うことができます。例えば、データのサブセットを選択して検索結果をフィルタリング:パフォーマンスについて

var singleItem = joinedlist 
       // Filter our joined list 
       .Where(item => item.StudentId.Equals(1)) 
       // Select only a subset of columns 
       .Select(item => new {item.StudentUsername, item.StudentAddress}) 
       // Return only a single item 
       .FirstOrDefault(); 

- 私はあなたのEFであなたのLINQ文のSQL出力を表示することができプロファイラのホールドを得ることを示唆しています。これは、遅延ロードを理解し、誤った.ToList()があなたのDB全体を返す可能性がある場合に、本当に役立ちます!

関連する問題