响应式UI设计导致Blazor应用程序中的实体框架出现问题

我熟悉编写高响应性的ASP.NET MVC应用程序,在该应用程序中加载初始页面数据,然后触发多个AJAX调用以加载页面的“辅助”数据。因此,在后台,这些AJAX请求几乎都同时到达了Web服务器并从我们的SQL DB中提取数据。

我设想使用Blazor应用程序执行非常类似的操作。因此,我们将向页面加载一些数据,然后将其包含多个组件,然后在页面上显示其他数据。这些组件的加载可以通过用户操作或页面上的其他事件来初始化。

那是我看到的一个问题:事件处理程序对剃刀页面上各个组件触发的事件都反应非常好,然后它们都击中了我们的DataService(注入到页面中),这随后导致大量线程达到我们的实体框架的背景。

那是不允许的-只能在任何时间调用一个线程。

要解决此问题,我可以使用SemaphoreSlip(1,1)锁定Context,以确保在任何时候仅可以访问一个线程,但是这对我来说似乎有点瓶颈。当然,锁定Context不是microsoft期望我们做的事情。...??

我在这里想念什么?

我正在使用Blazor-Server,.NET Core 3.1 / EF Core 3.1。在我的应用启动时,我正在设置EF上下文和DI服务:

services.AddDbContext<MyContext>();
services.AddScoped<MyService>();

上下文被注入到Service的构造函数中(根据microsoft的Blazor示例),服务被注入到Page中。

gechenlei 回答:响应式UI设计导致Blazor应用程序中的实体框架出现问题

就像在ASP.NET中一样,Blazor中的“作用域”服务似乎作用于客户端会话,而不是HTTP请求。

  

Blazor Server托管模型支持范围有效期。在   Blazor Server应用程序,范围内的服务注册范围仅限于   连接。

https://docs.microsoft.com/en-us/aspnet/core/blazor/dependency-injection?view=aspnetcore-3.0#add-services-to-an-app

因此,您将为DbContext使用“瞬态”生存期,或者仅在using块或语句中将DbContext等式创建为局部变量。见

https://github.com/aspnet/AspNetCore/issues/10448

有关此问题的扩展讨论。

,

Blazor与MVC的不同之处在于,页面始终处于活动状态。认为“ Windows窗体”而不是“ Web窗体”。您不会进行“ Ajax调用”,因为没有回发可以避免。

请参阅: Creating A Step-By-Step End-To-End Database Server-Side Blazor Application

update_weights_v2()
本文链接:https://www.f2er.com/3164405.html

大家都在问