簡體   English   中英

命令已在進行中:SELECT t.id, t.asp_client_id

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

這是什么鬼?

謝謝

干杯

RE:命令已經在進行中

如果您有一個共享的_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.

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