服务共享的DbContext(.NET core 8)

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

我有 2 个不同的服务,比如说

NavService
PageService
,每个服务都接收在构造函数中注入的 DbContext。

一个服务用于 NavMenu 的

OnInitializedAsync
,另一个服务用于当前页面的
OnInitializedAsync

我的问题是,我收到“在上一个操作完成之前,在此上下文实例上启动了第二个操作”。例外。看来两个服务都使用了相同的 DbContext 实例,导致了异常。

我的问题是:我怎样才能正确执行此操作?似乎一个解决方案是使 DbContext 瞬态,但另一方面,大量的缩减表明通常不需要这样做。

PS:这只发生在

UseSqlServer
,而不是
UseSqlite

c# entity-framework-core blazor
1个回答
1
投票

Blazor Server 与作用域 DbContext 配合不佳。 Blazor 服务器应用程序中的范围是客户端连接,这意味着该范围以及 DbContext 实例在用户访问站点的整个时间内都保持活动状态。这意味着单个用户请求的所有组件都会获得相同的 DbContext 实例,并且您会收到您所描述的错误,因为 DbContext 实例无法同时处理多个数据库操作。

建议的解决方案是使用DbContextFactory。您注入这个工厂而不是 DbContext 本身,然后您可以在需要时实例化一个新的 DbContext,并在完成后将其处置。

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