在使用之前预先加载上下文

时间:2015-05-22 08:09:22

标签: c# wpf entity-framework

这很难解释所以请耐心等待。

我有一个视图模型使用的实体框架上下文。从本质上讲,它是一个搜索框,其中包含一个使用上下文根据搜索条件运行查询的服务。

问题是,当执行第一次搜索时,DbContext会启动并查看数据库以生成实体和关系。 (至少这是我认为正在发生的事情)

以下说明如下:

Initial search

第一次搜索需要几秒钟,因为实体框架正在做这件事。执行第一次搜索后,执行的所有其他搜索几乎立即发生。它只是第一次搜索,需要很长时间。

Search results

现在,问我的问题。

是否可以强制DbContext加载关系,并且通常在对上下文执行任何操作之前(异步)执行此操作?即查询。

理想情况下,第一次搜索应该与其他搜索一样快。

2 个答案:

答案 0 :(得分:1)

是的,只需查询实体,但不对它们执行任何操作。 dbContext然后缓存结果。

答案 1 :(得分:1)

首次使用需要花费大量时间取决于db模式的大小(构建EF的虚拟表),并在第一次实例化时在运行时完成一次。

只需在启动时初始化另一个线程上的上下文并对其执行任何查询,它将异步地执行该性能。

不要试图保持对该上下文的引用,创建上下文很便宜并且它们意味着短暂存在,而且只有在您的过程中第一次创建它时才是昂贵的。

如果减速是一个问题,即使是异步,你可以让EF在编译时完成这项工作,但它有点涉及