2016-07-06 19 views
1

で1対多と私は、Entity Frameworkのにはかなり新しいですし、次の問題を抱えて:エラーEntity Frameworkの

public class Bank{ 
     //Showed only problem moments 
     public Guid Id {get;set;} 
     public List<Branch> Branches { get; set; } 
     public Bank(){ 
      Branches = new List<Branch>(); 
     }  
} 

public class Branch{ 
    public Guid Id {get;set;} 
    public string Address {get;set;} 
} 

私はコードから手動で新しい銀行と支店を追加するためにしようと試み、それが働きました。また、すべてのPKとFKでMSSQLにテーブルを作成しました。私は次の操作を行うためにしようと試みたときに しかし、:

私が得た
var bankData = new ApplicationContext().Banks; 
return Json(bankData, JsonRequestBehavior.AllowGet) 

は私の銀行データと支店がnullでした。

私はCodeFirstで関係を作成することに間違いを犯しましたか?

答えて

4

を以降、積極的なロードの必要な深さが適切に選択式を提供することで、指定することができますstrongly typed .INCLUDEがある:含まれるあなたは可能性を使用するには

深さ

using System.Data.Entity; // NB! 

var bankData = new ApplicationContext().Banks 
        .Include(b=> b.Branch) 

たり、積極的なロード

return Json(bankData, JsonRequestBehavior.AllowGet) 

new ApplicationContext().Banks.Include("Branches"); 

を使用して、同じコードを使用してJSONを返し、その後System.Data.Entityを使用しない場合:

熱心な読み込みは1つのタイプのエンティティに対するクエリが関連するエンティティもクエリの一部としてロードするプロセス。 Eagerの読み込みは、Include()メソッドを使用して行います。

次の例では、Include()メソッドを使用して標準と一緒にデータベースからすべての生徒を取得します。

遅延ロード:

Entity Frameworkのの重要な機能の1つは、遅延ロードです。レイジーローディングとは、特に要求するまで、関連するデータの読み込みを遅らせることを意味します。

0

デフォルトでは、Entity Frameworkはエンティティ上の子オブジェクトを設定しません。しかし、そのための仕組みがあります。 1つは、複数のデータベース呼び出しを使用し、開発者が何が起こっているか分からない場合にパフォーマンスの問題を引き起こす可能性があるため、lazyローディングを使用することです。include(単一の呼び出しですべてのデータをフェッチする) 。 EF 4.1のよう

new ApplicationContext().Banks.Include("Branches"); 
+0

ああ、私の深い感謝。ただし、学術目的でのみ、遅延読み込みオプションも追加できますか? – IskanderR

+0

関連するエンティティの読み込みに関する多くの情報がここにあります。https://msdn.microsoft.com/en-us/data/jj574232.aspx – DVK

関連する問題