![](/img/trans.png)
[英]what happens if multiple users call C# File.WriteAllText at the same time to the same location?
[英]What happens if multiple users make a request in Blazor at the same time?
我實際上只是進入前端和 Blazor 並且正在制作一個簡單的 web 應用程序,該應用程序根據用戶輸入的數據查詢數據庫。 由於我使用的是 Entity Framework Core,因此我必須小心數據庫上下文事務,即在同一個 dbcontext 上不能有兩個同時事務。
由於與 DB 和 EF Core 一起工作的邏輯是在常規 class 和方法中,我想知道兩個用戶是否同時單擊前端上的按鈕,這是否會啟動兩個單獨的線程,它們將具有兩個單獨的 dbcontexts,一切都會很好還是兩個線程(我想它不能只有一個線程,現在是 21 世紀)使用相同的 dbcontext?
為清楚起見 - 我在啟動時使用來自 appsettings.json 的信息創建/實例化我的 dbcontext。 我可以改變它沒問題,我只需要知道我是否應該。
這取決於 DbContext 在 controller 中的范圍。 最簡單的事情是這樣的:
public ActionResult SomeAction( /* params */)
{
using (var context = new AppDbContext())
{
// load and return or update and return data,
// preferrably projected ViewModels, not Entities
}
}
每個請求都使用一個單獨的 DbContext。 這種方法的主要問題是,單獨對 controller 進行單元測試更加困難(模擬 DbContext 和 DbSet 很痛苦),並且為您可能想要分散的更大工作流傳遞 DbContext 可能會很麻煩跨不同的方法或服務。
推薦的模式是依賴注入 /w 一個 IoC 容器,例如 ASP.Net Core 可以原生提供的,或其他類似 Autofac 的模式。 在這里,您的 controller 接受 DbContext 或包裝 DbContext 的工作單元之類的模式,通常作為構造函數參數。 從那里開始,取決於如何將 IoC 容器配置為“范圍”它提供的 DbContexts 的生命周期。 根據容器的不同,有許多選項,但典型的選項是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.