Я просто задаю этот вопрос, чтобы устранить некоторую путаницу в отношении .Net/Entity Framework, которая позволяет реализовать ленивую загрузку/Нежелательные концепции загрузки объектов памяти, как и для объекта Database. Я знаю, что Entity Framework предоставляет эту функцию, встроенную для объектов базы данных. Но мы можем использовать тот же подход (с использованием или без использования Entity Framework) для в объекте памяти как объекты класса/список и т.д.Возможно ли реализовать концепцию ленивой загрузки/загрузкой объекта памяти, такого как List (не с объектами DB)
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; }
}
Я создал объект класса студентов со всеми свойствами инициализации:
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();
}
есть ли способ, что мы можем загрузить этот список Темы и адрес объект только на спросе.
Одним из вариантов является то, что я могу инициировать адрес и список объектов только тогда, когда мне это нужно. Но возможно ли, как EF реализует ленивую загрузку.
Я изучил Lazy < T>, но не получил много разъяснений для этого же.
Просьба предоставить ценные отзывы/предложения. Заранее спасибо.
Пусть каждый тип элементов является IEnumerable и использует такие запросы, как Select (x => x ..), чтобы получить желаемый результат, даже если он может быть IEnumerable с одним элементом. Вы в конечном итоге загрузите все как ленивые, как возможно, и вы никогда не закончите борьбу с переменной == null –
@devhedgehog, извините, я не понял вашу мысль, не могли бы вы объяснить немного больше. – Gerry
Lazy loading для встроенных в память структур не делает много * смысла *, если только данные, которые вы поставляете позже, не являются случайными, - данные должны откуда-то исходить. Итак, что вы собираетесь делать - хранить все данные внутри объекта «Студент» до тех пор, пока не будет запрошен «Адрес», а затем его заполнить? в какой форме будут использоваться данные в объекте «Студент»? Разве это не оставляет вас только с двумя представлениями адреса, когда вы на самом деле нуждаетесь в нем, и он уже доступен. –