Как загрузить Entity Framework Self Track TrackableCollection <T>данные отношений только при необходимости? - PullRequest
0 голосов
/ 17 августа 2011

Я использую 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). Я предполагаю, что это называется Lazy Loading, и я не понял, как это сделать, когда я немедленно закрываю соединение сущностей, и я бы хотел остаться таким.

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

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

Спасибо.

1 Ответ

0 голосов
/ 17 августа 2011

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

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

...