LinqToDb MySql-запрос бросает MySqlException

До недавнего времени я, для работы с БД, использовал Dapper. Он мне всем нравится, но, по современным меркам, уж больно он "низкоуровневый". Использовал EF Core, который работал стабильно, но слабоват, когда много однотипных таблиц вида object_####_, они часто меняются и меняется структура. Требуются постоянные запросы с разным составом полей. И что понадобится в следующий раз пользователям, неизвестно.

Мне посоветовали LinqToDb, мол он всё это умеет. И да, он умел практически всё что надо.

Сделал я тестовое приложение. Идёт чтение, в n-тасков, большой таблицы из постгреса. После чтения записи, надо получить запись с сервера MySql, и обновить полученную запись в постгреса.

Таски запускаются через Task.Factory.StartNew(...) ожидание через Task.WaitAll(tasks).

Постгрес справляется на ура, всё хорошо. А, вот с MySql возникла проблема.

В таске выполняется так:

LinqToDbConnectionOptionsBuilder myBuilder = new LinqToDbConnectionOptionsBuilder();
myBuilder.UseMySql("тут ConnectionString");
await using DataConnection myDataConnection = new DataConnection(myBuilder.Build());

foreach (LayerTable item in page)
{
    DataParameter f = new DataParameter("@id", item.RowId, DataType.Int32);
    List<IDictionary<string, object>> result = myDataConnection.Query<IDictionary<string, object>>(Reader, $"select id from manual limit 10").ToList();
}

...

IDictionary<string, dynamic> Reader(IDataRecord reader)
{
    Dictionary<string, dynamic> values = new Dictionary<string, dynamic>(reader.FieldCount);
    object[] rowValues = new object[reader.FieldCount];
    int n = reader.GetValues(rowValues);
    for (int j = 0; j < n; j++)
    {
        values.Add(reader.GetName(j), rowValues[j]);
    }
    return values;
}

На строке myDataConnection.Query тупит секунд 10 и вываливается с MySqlException со словами

"Unable to read data from the transport connection: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.."

Запрос не выполняется ни разу, в reader не заходит. Причём, если этот же код выполнять в main(), то работает как часы. Ещё обратил внимание, что если остановиться на брейкпоинте, на строке запроса, то отладчик, в DataConnection объекта, в полях DbConnection показывает сообщение, что значение будет доступно, если все потоки будут выполняться.

Может есть какая-то особенность работы с MySql в LinqToDB?
С Постгресом нет проблем. Такой же код, но с Dapper работает на ура.


Ответы (0 шт):