异常 - "This MySqlConnection is already in use" 使用 MYSql 服务器时。然而,相同的 Linq 查询在 MS SQL 服务器上运行良好

Exception - "This MySqlConnection is already in use" when using MYSql server. However the same Linq query works fine with MS SQL Server

我正在使用 .NET Core 框架 (5.0) 开发质量保证应用程序。最初,我使用的是 MS SQL Server DB,它运行良好。但是,现在由于需求变化,我现在已经转移到 MYSQL 服务器。

我已经使用代码优先方法成功集成了数据库 (Entity framework)。此外,我正在使用 NuGet 包 Pomelo.EntityFrameworkCore.MySql 并且一切正常,除了下面提到的 Linq 查询,我在其中遇到异常 - This MySqlConnection 是已经在使用.

public List<ErrorMessage> GetErrorMessage(int productId)
{
    List<ErrorMessage> localList = new List<ErrorMessage>();
    var product = _db.Products.Where(a => a.ProductId == productId).FirstOrDefault();
    if (product != null)
    {

        var products = _db.Products
            .Where(q => q.ProductName.ToLower() == product.ProductName.ToLower()).Select(e => e.ProductId);
        foreach (var item in products)
        {
            var errormessage = _db.ErrorMessageTracks.Where(q => q.ProductId == item).Select(e => e.ErrorMessage);
            foreach (var msg in errormessage)
            {
                if (!localList.Select(q => q.ErrorMessageId).Contains(msg.ErrorMessageId))
                {

                    localList.Add(msg);
                }
            }
        }

    }
    return localList;
}

我已经提到了其他类似的问题,但我无法解决问题,因为我不确定如何关闭 SQL 连接,因为我使用的是 Linq 查询而不是实际的 SQL加入。如有任何帮助,我们将不胜感激!

你可以在linq查询的末尾加上ToList(),应该可以解决问题:

var products = _db.Products.Where(q => q.ProductName.ToLower() == product.ProductName.ToLower())
                           .Select(e => e.ProductId).ToList();

添加 Tolist() 以获得外部 for 产品 将立即执行查询并允许连接可用于内部 for 获取 .