LinqToDb
От: Lev_Limin  
Дата: 24.12.20 18:44
Оценка:
До недавнего времени я, для работы с БД, использовал dapper. Он мне всем нравится, но, по современным меркам, уж больно он "низкоуровневый".
Использовал ef core, который работал стабильно, то слабоват, когда много однотипных таблиц вида object_####_, они часто меняются и меняется структура.
Требуются постоянные запросы с разным составом полей. И что понадобится в следующий раз пользователям, неизвестно.

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

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

Постгрес справляется на ура, всё хорошо. А, вот с 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(), то работает как часы.

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