Как загружать данные об отношениях Entity Framework Self Track TrackableCollection‹T› только при необходимости?

Я использую Entity Framework 4 и Self Tracking Entities. Схема такая:

Пациент -> Обследования -> LeftPictures -> RightPictures

Итак, есть TrackableCollection этих двух отношений Пациент 1 - * ....Изображения. Теперь при загрузке формы клиентов и просмотре деталей мне не нужно загружать эти изображения данных, только когда загружается другая форма для деталей исследования!

Я использую библиотеку классов в качестве хранилища данных для получения данных из базы данных (SQL Server) и этого кода:

public List<Patient> GetAllPatients()
{
    try
    {
        using (OptoEntities db = new OptoEntities())
        {
            List<Patient> list = db.Patients
                .Include("Addresses")
                .Include("PhoneNumbers")
                .Include("Examinations").ToList();

            list.ForEach(p =>
                             {
                                 p.ChangeTracker.ChangeTrackingEnabled = true;

                                 if (!p.Addresses.IsNull() &&
                                     p.Addresses.Count > 0)
                                     p.Addresses.ForEach(a => a.ChangeTracker.ChangeTrackingEnabled = true);

                                 if (!p.PhoneNumbers.IsNull() &&
                                     p.PhoneNumbers.Count > 0)
                                     p.PhoneNumbers.ForEach(a => a.ChangeTracker.ChangeTrackingEnabled = true);

                                 if (!p.Examinations.IsNull() &&
                                     p.Examinations.Count > 0)
                                     p.Examinations.ForEach(e =>
                                                                {
                                                                    e.ChangeTracker.ChangeTrackingEnabled = true;

                                                                });
                             });

            return list;
        }
    }
    catch (Exception ex)
    {
        return new List<Patient>();
    }
}

Теперь мне нужно при вызове формы сведений об экзамене перейти и получить все изображения для отношения экзамена (LeftEyePictures, RightEyePictures). Я предполагаю, что это называется ленивой загрузкой, и я не понял, как это сделать, когда я немедленно закрываю соединение Entities, и я хотел бы остаться таким.

Я использую компоненты BindingSource через приложение.

Каков наилучший метод для получения желаемых результатов?

Спасибо.


person George Taskos    schedule 17.08.2011    source источник


Ответы (1)


Сущности с самостоятельным отслеживанием не поддерживают отложенную загрузку. Более того, отложенная загрузка работает только тогда, когда объекты привязаны к живому контексту. Вам не нужно немедленно закрывать/удалять контекст. В случае WinForms контекст приложения обычно живет дольше (вы можете следовать одному контексту для каждой формы или одному контексту для каждого подхода презентатора).

Приложение WinForms представляет собой сценарий для обычных прикрепленных объектов, в котором все эти функции, такие как отложенная загрузка или отслеживание изменений, работают из коробки. Предполагается, что STE используются в распределенных системах, где вам необходимо сериализовать объект и передать его другому приложению (через вызов веб-службы).

person Ladislav Mrnka    schedule 17.08.2011