2017-04-02 8 views
0

以下は、コードファーストエンティティフレームワーク(DbContext)を使用してデータベーステーブルを制御する2つのクラスです。遅延読み込みがEntityFrameworkコアで機能しない

public class Employee 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public string EmployeeName { get; set; } 

    public int DepartmentId { get; set; } 

    public Department Department { get; set; } 

} 

-

public class Department 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public string DepartmentName { get; set; } 
} 

私は部門ためのナビゲーションプロパティ下の行を持つ従業員を取得した場合はnullです:

var employees = _context.Employees.ToList(); 

しかし、私は最初に別々に移入場合このような部門との変数...

 var departments = _context.Departments.ToList(); 

     var employees = _context.Employees.ToList(); 

... 従業員の各従業員にDepartmentオブジェクトが含まれています。

私の質問: ナビゲーションプロパティに入力するのがベストプラクティスですか?私は、Entity Frameworkがこれをデフォルトで行っており、ToList()メソッドが遅延読み込みを処理すると想像していました。

+1

**通知**のプロパティで**のナビゲーション**のプロパティを意味する場合は、EF *遅延読み込み*、* eager loading *および* explicit loading *を検索して、 )。 –

+0

はい、私はナビゲーションプロパティを参照していました。私はその問題を訂正します。レイジー/ eagerローディングについて:ToList()メソッドがデータを読み込むべきではありませんか? – Sparked

+1

このデータだけをロードします。 ** Employee.Department'のような**関連する**データではありません。 https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx –

答えて

3

docs/roadmapを読むと、EFコア1.0/1.1ではレイジーローディングがまだサポートされていないことに気がつきました。

現在のところ、.Includeまたは熱心な読み込みのみがサポートされています(両方ともドキュメントに詳しく記載されています)。

EF 6のすべての機能がEFコアで使用可能であると想定してはいけません。 EFコアは完全に書き換えであり、EF6の多くの機能は含まれていません。そのようなものが必要な場合は、代わりにEF6を使用してください。

EFコアは、ほとんどの単純/基本的なORMには適していますが、これらの機能を使用するプロダクションではEF6を使用することをお勧めします。