如何缓存延迟加载的属性

时间:2011-03-29 08:58:33

标签: c# entity-framework caching

背景

我有两张表masterdetaildetail中的每一行都包含master的属性(延迟加载)。

我想将一个detail的集合与他们的主人一起缓存在如下集合中:

List<Detail> cachedItems = entities.Details.ToList();

foreach (var d in cachedItems)
    d.master // throws exception 
  

ObjectContext实例已被释放,不能再用于需要连接的操作。

问题:

如何在不使用其他集合的情况下使用master对象缓存detail对象,我更愿意在一次往返中使用它们。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用Include功能来塑造查询结果。

答案 1 :(得分:1)

在关闭ObjectContext之前,您必须明确获取主记录。如果Detail实体中的导航属性被调用Master,请将您的数据检索查询修改为:

List<Detail> cachedItems = entities.Details.Include("Master").ToList();

或者在使用Include扩展方法表格EF 4.1

的情况下
List<Detail> cachedItems = entities.Details.Include(d => d.Master).ToList();

这将通过一次往返立即加载与主人的详细信息。