0

我使用实体框架 4 和自我跟踪实体。架构是这样的:

患者 -> 检查 -> LeftPictures -> RightPictures

所以有这两个关系的TrackableCollection Patient 1 - * ....Pictures。现在在加载客户表格和浏览详细信息时,我不需要加载这些数据图像,只有在为考试详细信息加载另一个表格时!

我正在使用类库作为数据存储库从数据库(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)。我想这被称为延迟加载,当我立即关闭实体连接时我不明白如何实现它,我想保持这样。

我通过应用程序使用 BindingSource 组件。

获得预期结果的最佳方法是什么?

谢谢你。

4

1 回答 1

0

自跟踪实体不支持延迟加载。此外,延迟加载仅在实体附加到实时上下文时才有效。您不需要立即关闭/处置上下文。在 WinForms 应用程序上下文通常存在较长时间的情况下(您可以遵循每个表单一个上下文或每个演示者方法一个上下文)。

WinForms 应用程序是普通附加实体的场景,其中所有这些功能(如延迟加载或更改跟踪)都是开箱即用的。STE 应该用于需要序列化实体并将其传递给另一个应用程序(通过 Web 服务调用)的分布式系统。

于 2011-08-17T19:09:58.477 回答