簡體   English   中英

有沒有辦法使用多線程的工作單元模式?

[英]Is there a way to consume unit of work pattern mutlithreaded?

我正在通過應用程序通過 unitOfWork 使用我的存儲庫服務。 但是當我嘗試同時進行多個數據庫調用時,DbContext 拋出了一個異常,說:

different threads concurrently using the same instance of DbContext

這是真的,因為我同時發出 3 個數據庫請求:

        var insertYekkaTask = unitOfWork.YekkaRepository.InsertAsync(new(data.AdvertID, data.MatchID));
        var getMatchTask = matchService.GetAsync(data.MatchID);
        var getAdvertTask = advertisementService.GetAsync(data.AdvertID);

        await Task.WhenAll(insertYekkaTask, getMatchTask, getAdvertTask);

        var yekkaId = insertYekkaTask.Result;
        var match = getMatchTask.Result;
        var advertisement = getAdvertTask.Result;

現在,正如您從標題中看到的那樣,有沒有辦法以多線程或類似的方式使用工作單元模式?

謝謝。

實體框架的限制是一次只能用於一個請求(每個數據庫上下文)。 這實際上是許多(大多數?)數據庫引擎使用的在線協議的限制:當一個查詢正在運行時,相同的連接在該查詢完成之前不能運行不同的查詢。

因此,如果您想要執行多個並發查詢 - 無論是使用多線程還是異步代碼 - 您將需要多個 EF db 上下文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM