是否可以创建 Entity Framework 上下文实例的副本以进行并行查询
Is it possible create a copy of Entity Framework context's Instance to make parallel queries
堆栈:AngularJs、Web API、Entity Framework、SQL 服务器。
我需要使用并行查询查询 SQL 服务器以更快地获得结果。
我正在使用 Web API 并且可以将查询拆分为单独的 Web API 调用,因为它会为每个 Web API 调用创建一个新的数据库上下文副本,但我想知道是否可以在一个 Web API 调用 中完成它。 (我假设我需要为每个并行查询创建一个单独的上下文副本,因为 Entity Framework 不允许为同一上下文实例并行调用多个查询)。
我正在使用 Unity DI 容器创建上下文实例。
如果您正在谈论在多个线程上查询数据库,那么是的,您必须为每个线程启动一个新的上下文实例。但是,如果您以任何方式修改 database/data 以验证每个线程中的查询结果,请小心,否则您最终可能会得到您不一定想要的结果。
我之前已经对数据库进行了多线程插入(不是真正推荐的路径,但我这样做更多是为了测试是否可以),你只需要记住将所有连接和实体分开每个线程或 EF 都会对你大喊大叫。
好吧,您可以将容器设置为每次调用都创建一个新实例...在 Unity 上,我建议您创建一个命名条目(使用 PerResolveLifetimeManager
)并将现有条目留给应用程序的其余部分(只是为了隔离方法)...
哦,记得手动处理这些新上下文!
堆栈:AngularJs、Web API、Entity Framework、SQL 服务器。
我需要使用并行查询查询 SQL 服务器以更快地获得结果。
我正在使用 Web API 并且可以将查询拆分为单独的 Web API 调用,因为它会为每个 Web API 调用创建一个新的数据库上下文副本,但我想知道是否可以在一个 Web API 调用 中完成它。 (我假设我需要为每个并行查询创建一个单独的上下文副本,因为 Entity Framework 不允许为同一上下文实例并行调用多个查询)。
我正在使用 Unity DI 容器创建上下文实例。
如果您正在谈论在多个线程上查询数据库,那么是的,您必须为每个线程启动一个新的上下文实例。但是,如果您以任何方式修改 database/data 以验证每个线程中的查询结果,请小心,否则您最终可能会得到您不一定想要的结果。
我之前已经对数据库进行了多线程插入(不是真正推荐的路径,但我这样做更多是为了测试是否可以),你只需要记住将所有连接和实体分开每个线程或 EF 都会对你大喊大叫。
好吧,您可以将容器设置为每次调用都创建一个新实例...在 Unity 上,我建议您创建一个命名条目(使用 PerResolveLifetimeManager
)并将现有条目留给应用程序的其余部分(只是为了隔离方法)...
哦,记得手动处理这些新上下文!