Список сопоставления <dynamic>с использованием Slapper - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть следующий фрагмент кода в классе репозитория, использующий Dapper для запроса и Slapper.Automapper для отображения:

class MyPocoClass{
    MyPocoClassId int;  
    ...
}

//later:
var results = connection.Query<dynamic>("select MyPocoClassID, ...");
return AutoMapper.MapDynamic<MyPocoClass>(results).ToList();

results выше имеет много элементов, но список, возвращаемый AutoMapper.MapDynamic имеет только один элемент (что явно неправильно).Однако я обнаружил, что добавление следующей конфигурации в AutoMapper решает проблему:

AutoMapper.Configuration.AddIdentifier(typeof(MyPocoClass), "MyPocoID");

Почему Slapper.AutoMapper должен знать ключ моего класса, чтобы просто отобразить список в другой список?Это пытается устранить дубликаты?Я также отмечу, что это происходит только при отображении определенного из моих POCO (пока) ... и я не могу понять, почему этот конкретный POCO особенный.

1 Ответ

0 голосов
/ 09 ноября 2018

Оказывается, это ошибка в Slapper.AutoMapper.

Библиотека поддерживает отображение без учета регистра и ключи на основе соглашений. Набор результатов SQL имеет MyPocoClassID, а сам класс имеет MyPocoClassId - что не является проблемой для Slapper.AutoMapper в отношении отображения. Но внутренне Slapper.AutoMapper идентифицирует (по соглашению), что MyPocoClass имеет MyPocoClassId в качестве идентификатора, и он не может найти это поле в наборе результатов. Библиотека использует этот ключ для устранения дубликатов в списке вывода (по какой-то причине), и, поскольку они все «пустые / пустые», мы получаем только одну запись.

Я могу отправить запрос на удаление, чтобы решить эту проблему, но поскольку библиотека, кажется, не поддерживается, я не думаю, что это поможет.

...