实体框架不缓存对象

时间:2013-11-07 12:27:31

标签: c# entity-framework

我有一个使用存储过程的“案例”列表。

List<Case> tmp = context.Case_Search(Query).ToList();

当我在页面上显示此列表时,它引用了一个名为“CaseContacts”的链接表,这使得EF为每个案例运行一个SQL语句。

由于我无法在存储过程中使用include,我尝试使用以下方式预加载链接对象:

int[] ids = tmp.Select(x => x.ID).ToArray();
CaseContact[] CCs = context.CaseContacts.Where(x => ids.Contains(x.CaseID)).ToArray();

但是,对于每个链接的CaseContact,EF仍然会转到数据库。

我是否需要告诉EF使用缓存版本?我假设如果先前已经加载了对象,EF将使用该对象而不是另一次访问DB。

更新

我已经更改了我的代码以在运行我的代码之前关闭延迟加载并在之后重新启用它,它似乎做了我期望的1-2 sql旅行而不是200 +。

context.Configuration.LazyLoadingEnabled = false;
List<Case> tmp = context.Case_Search(Query).ToList();
context.Configuration.LazyLoadingEnabled = true;

甚至不需要额外的查询来加载链接属性。这有什么缺点吗?

0 个答案:

没有答案