[英]A command is already in progress: SELECT t.id, t.asp_client_id
這個錯誤出現在我的代碼中,我懷疑幾個線程共享一個數據庫連接,即使這是真的我不知道如何處理它?
private productDTO Map(product product)
{
return new productDTO()
{
Id = product.Id,
Price = product.TIN,
Quantity = product.SSNasTIN,
ProductName = product.productName,
ProductWebsite = product.productWebsite,
HasChildProducts = HasChilds(product.Id).Result
};
}
private async Task<bool> HasChilds(long productId)
{
return await _context.Products.AnyAsync(c => c.ParentProductId == productId);
}
StackTrace: 在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)\r\n 在 System.Threading.Tasks.Task
1.GetResultCore(Boolean waitCompletionNotification)\r\n at System.Threading.Tasks.Task
1.get_Result ()\r\n
這是什么鬼?
謝謝
干杯
如果您有一個共享的_context
,那么解決方案是為每個請求創建一個新的上下文。
如果您可靠地得到相同的異常,可能是因為:
Map
方法。 在這種情況下,您可以重寫您的產品查詢以包括子項或分別檢索子項和產品。products
,然后在結果上調用Map
以使Map
對許多產品同時執行(例如,使用Task.WhenAll
)。 由於所有Map
調用都使用相同的_context
,它們會相互沖突。我認為長期的解決方案是重寫您的查詢以在一個 go 中檢索具有父級的子級。 話雖如此,其他解決方案也可以工作。
.Result
你必須的
private async Task<productDTO> MapAsync(product product)
{
(...)
HasChildProducts = await HasChildrenAsync(product.Id);
更一般地說,進入數據庫以獲取每條記錄的額外信息的映射方法可能不適用於許多產品。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.