如何使用Autofac注入相同的DbContext实例来处理HTTP请求而不会导致并发问题?

问题描述 投票:0回答:1

我正在使用Autofac和Entity Framework开发ASP.net Web API应用程序。

我一直在将不同的服务类拆分为更小的类,以使我的代码更易于测试并使我的代码更加实用。

我正在使用Autofac将Entity Framework DbContext注入到我的各种帮助器类中。这会成为问题,因为如果我在两个不同的帮助器类中使用从DbContext查询的实体,当实体框架尝试生成查询时,我会收到错误。

该错误表明实体框架无法使用来自两个不同DbContext实例的实体生成查询。

显然,解决方案是我需要配置Autofac,以便将相同的DbContext实例注入到每个帮助器类中,但是我担心如果我尝试这样做,我可能会在部署此应用程序时遇到并发问题在生产环境中,许多人立刻使用它。

如何配置Autofac,以便当请求到达我的应用程序时,我的API帮助程序类都获得相同的DbContext实例,但是我没有跨多个请求的并发问题?

entity-framework entity-framework-6 autofac dbcontext
1个回答
0
投票

Autofac文档(https://autofaccn.readthedocs.io/en/latest/faq/per-request-scope.html#no-per-request-filter-dependencies-in-web-api)推荐的操作过滤器的替代方法请参阅:“Web API中没有每个请求过滤器依赖项”并手动转到其他人的DependencyResolver:

您可以查看Medhime DbContextScope工作提供程序单元。 (https://www.nuget.org/packages/EntityFramework.DbContextScope/)为EF6和EF Core编译。

注入的类依赖项将成为顶级的DbContextScopeFactory,以及服务的AmbientDbContextLocator。这些不会因Web API对请求生命周期范围的限制而“中断”。 ContextScopeFactory将初始化一次并提供DbContext,而定位器将被提供给该单个实例。

如果管理跨服务的上下文引用并且API动作证明是笨重的,那么可能值得一看。

© www.soinside.com 2019 - 2024. All rights reserved.