我使用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组件。
获得所需结果的最佳方法是什么?
谢谢。
答案 0 :(得分:0)
自我跟踪实体不支持延迟加载。此外,延迟加载仅在实体附加到实时上下文时才起作用。您无需立即关闭/处置上下文。在WinForms的情况下,应用程序上下文通常会存在更长的时间(您可以按照每个表单一个上下文或每个演示者方法一个上下文)。
WinForms应用程序是普通附加实体的场景,其中所有这些功能(如延迟加载或更改跟踪)都是开箱即用的。 STE应该用于分布式系统,您需要序列化实体并将其传递给另一个应用程序(通过Web服务调用)。