【发布时间】:2020-03-01 02:55:33
【问题描述】:
我熟悉编写响应迅速的 ASP.NET MVC 应用程序,我们在其中加载初始页面数据,然后触发多个 AJAX 调用以加载页面的“辅助”数据。所以在幕后,这些 AJAX 请求几乎同时到达 Web 服务器并从我们的 SQL 数据库中提取数据。
我设想使用 Blazor 应用程序做一些非常相似的事情。所以,我们会用一些数据加载页面,然后有多个组件,然后在页面上显示附加数据;这些组件的加载可以通过用户操作或页面上的某些其他事件来初始化。
这就是我看到一个问题的地方:事件处理程序对 razor 页面上的各种组件触发的事件都做出了非常好的反应,然后它们都点击了我们的 DataService(注入到页面中),这会导致很多线程击中我们的实体框架的上下文。
这是不允许的——任何时候只有一个线程可以调用上下文。
为了解决这个问题,我可以使用 SemaphoreSlip(1,1) 锁定上下文,以确保任何时候只有一个线程可以访问,但这对我来说似乎有点瓶颈。肯定锁定上下文不是微软希望我们做的事情......??
我在这里错过了什么?
我正在使用 Blazor-Server、.NET Core 3.1/EF Core 3.1。在我的应用启动时,我正在为 DI 设置 EF 上下文和服务:
services.AddDbContext<MyContext>();
services.AddScoped<MyService>();
Context 被注入到 Service 的构造函数中(根据 Microsoft 的 Blazor 示例),Service 被注入到 Page。
【问题讨论】:
标签: entity-framework entity-framework-core blazor blazor-server-side