1

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

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

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

由于我不能在存储过程中使用包含,因此我尝试使用以下方法预加载链接的对象:

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

但是,EF 仍会为每个链接的 CaseContact 访问数据库。

我需要告诉 EF 使用缓存版本吗?我假设如果该对象先前已加载,EF 将使用该对象,而不是再次访问数据库。

更新:

我已经更改了我的代码以在运行我的代码之前关闭延迟加载,然后再将其重新打开,它似乎做了我所期望的 1-2 次 sql 行程而不是 200 次以上。

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

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

4

0 回答 0