Общее сопоставление с Automapper для SQLite возвращает пустой список

Я хотел бы создать общую функцию поставщика данных, которая возвращает IEnumerable из прочитанных данных SQLite.

Создал инициализацию AutoMapper:

 cfg.CreateMap<IDataRecord, Layout>()

Затем вызывается CompileMappings(), и в самой команде считыватель возвращает данные, но сопоставитель не может их сопоставить. Пытался определить для каждого поля .ForMember()... ту же ошибку.

  public static IEnumerable<T> ExecuteReaderCommand<T>(SQLiteConnection connection, SQLiteCommand command)
        {
            using (var scope = new TransactionScope())
            {
                var result = Enumerable.Empty<T>();

                try
                {
                    connection.Open();
                    command.Connection = connection;

                    var reader = command.ExecuteReader();

                    result = Mapper.Map<IDataReader, IEnumerable<T>>(reader);
                }
                catch (Exception ex)
                {
                    _logger.Error(ex, "Can't execute {command}, with {connection}", command, connection);
                    return result;
                }
                finally
                {
                    connection.Close();
                }

                scope.Complete();
                return result;
            }
        }

Получение исключения Unmapped... с внутренним исключением Object -> Layout.

Не уверен, что я упускаю, но поскольку данные есть, читатель получает их, но картограф не отображает их.


person Paxsentry    schedule 19.07.2019    source источник
comment
github.com/AutoMapper/AutoMapper.Data   -  person Lucian Bargaoanu    schedule 19.07.2019


Ответы (1)


Я думаю, что подход был не очень хорошим, и, наконец, решил проблему с Dapper. Отличный инструмент рекомендую. Таким образом, все сопоставления выполняются правильно, без Automapper.

public IEnumerable<T> QueryData<T, U>(string sqlCommand, U parameters, string connection)
{
   using (var conn = new SQLiteConnection(connection))
   {
      return conn.Query<T>(sqlCommand, parameters).AsEnumerable();
   }
}

Еще раз спасибо Тим Кори

person Paxsentry    schedule 24.07.2019