2016-05-25 17 views
0

遅延アンロードを実装することが可能な.NET/Entity Frameworkに関するいくつかの混乱をクリアするためにこの質問をしています。/Eagerは、Databaseオブジェクトの場合と同様にメモリオブジェクトの概念を読み込みます。 私は、Entity Frameworkがデータベースエンティティにこの機能を組み込むことを知っています。しかし、我々は、私は初期化され、すべてのプロパティを持つ学生のクラスのオブジェクトを作成しリスト(DBオブジェクトではない)のようなメモリオブジェクトに遅延ロード/ Eagerローディングのコンセプトを実装できますか?

For example:

public class Student 
    { 
     public Student() { } 
     public Student(int studentId, string name, Address address, List<Subject> subjects) 
     { 
      StudentId = studentId; 
      Name = name; 
      Address = address; 
      Subjects = subjects; 
     } 

     public int StudentId { get; set; } 
     public string Name { get; set; } 
     public Address Address { get; set; } 
     public List<Subject> Subjects { get; set; } 
    } 
    public class Address 
    { 
     public string AddressLineOne { get; set; } 
     public string AddressLineTwo { get; set; } 
     public string City { get; set; } 
     public string State { get; set; } 
    } 
    public class Subject 
    { 
     public int SubjectId { get; set; } 
     public string SubjectName { get; set; } 
    } 

などのクラスオブジェクト/リストのようなメモリオブジェクト内のために(またはEntity Frameworkのを使用せずに)同じアプローチを使用することができます。

public ActionResult Index() 
    { 
     Student std = new Student(1, "Stduent1", new Address { AddressLineOne = "#118 D-Road", City = "CHD", State = "CHD" }, 
      new List<Subject> { 
       new Subject{ SubjectId=1, SubjectName="History" }, 
       new Subject{ SubjectId=2, SubjectName="English" } 
      }); 

     return View(); 
    } 

All properties are initialized and filled 我々は唯一のオンデマンドでこのSubjectリストやアドレスオブジェクトをロードすることができる方法はあります。

1つの選択肢は、私が必要なときだけ、私がアドレスと件名のリストを初期化できるということです。しかし、EFが遅延ロードを実装する方法が可能です。

私はLazyについて学んだことがありますが、それほど明確ではありませんでした。

ご意見/ご提案をお願いします。前もって感謝します。

+0

すべてのタイプのメンバーをIEnumerableにし、Select(x => x ..)のようなクエリーを使用して、1つのアイテムでIEnumerableであっても目的の結果を得るようにします。可能であれば、変数== nullとの戦いを終わらせることはありません –

+0

@devhedgehog、申し訳ありません、私はあなたのポイントを得ていません、もう少し説明してください。 – Gerry

+0

後で提供するデータが完全にランダムでない限り、インメモリ専用構造のレイジーロードは大量の* sense *を作成しません。データはどこかから来なければなりません。それでは、あなたは何をするつもりですか? 'Student'オブジェクトの中のすべてのデータを' Address'が要求されるまで保存し、それを移植しますか? 「スチューデント」オブジェクト内のそのデータはどのような形式になりますか?これは実際に必要なときにアドレスの2つの表現であなたを残すことはありません。すでに利用可能です。 –

答えて

1

私はなぜあなたは既にメモリ内にある何かの遅延ロードをしたいですが、私はあなたが正しく達成したいものを理解している場合、あなたがIEnumerableをでそれを行うことができ、非常にわからない:

public class Student 
{ 
    public IEnumerable<Subject> Subjects 
    { 
     get 
     { 
      for (int i = 0; i < 5; i++) 
      { 
       yield return new Subject(); 
      }     
     } 
    } 

} 

あなたがドン」利回りが必要ですが、それはあなたがどのようにあなたの科目を取得するかによって異なります。したがって、MoveNextが呼び出されるたびに(たとえばforeach内で)コードが呼び出され、必要なものを取得できます。

関連する問題