[英]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.