遅延アンロードを実装することが可能な.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();
}
我々は唯一のオンデマンドでこのSubjectリストやアドレスオブジェクトをロードすることができる方法はあります。
1つの選択肢は、私が必要なときだけ、私がアドレスと件名のリストを初期化できるということです。しかし、EFが遅延ロードを実装する方法が可能です。
私はLazyについて学んだことがありますが、それほど明確ではありませんでした。
ご意見/ご提案をお願いします。前もって感謝します。
すべてのタイプのメンバーをIEnumerableにし、Select(x => x ..)のようなクエリーを使用して、1つのアイテムでIEnumerableであっても目的の結果を得るようにします。可能であれば、変数== nullとの戦いを終わらせることはありません –
@devhedgehog、申し訳ありません、私はあなたのポイントを得ていません、もう少し説明してください。 – Gerry
後で提供するデータが完全にランダムでない限り、インメモリ専用構造のレイジーロードは大量の* sense *を作成しません。データはどこかから来なければなりません。それでは、あなたは何をするつもりですか? 'Student'オブジェクトの中のすべてのデータを' Address'が要求されるまで保存し、それを移植しますか? 「スチューデント」オブジェクト内のそのデータはどのような形式になりますか?これは実際に必要なときにアドレスの2つの表現であなたを残すことはありません。すでに利用可能です。 –