AutoMapper TypeConverter не вызывается при отображении IDataReader

У меня есть несколько моделей, которые я хотел бы отобразить с помощью AutoMapper. Automapper настроен для сопоставления IDataReader с классом модели. Проблема заключается в том, что мне нужно иметь установленный ITypeConverter на моем картографе, чтобы я мог перечислять ограниченное количество раз для каждой модели. Я не хочу создавать много классов, наследуемых от ITypeConverter для каждой модели.

Пример модели:

public class Customer: IModel
{
    public FirstName { get; set; }
    public LastName { get; set; }
}

Класс Mapper:

public static class AutoMappingConfig
{
    public static void Configure()
    {
        // I would have many other mappings like the one below. All taking an IDataReader and mapping to a model inheriting from IModel
        Mapper.CreateMap<IDataReader, Customer>()
            .ForMember(x => x.FirstName, o => o.MapFrom(s => s.GetString(s.GetOrdinal("first_name")))
            .ForMember(x => x.LastName, o => o.MapFrom(s => s.GetString(s.GetOrdinal("last_name"))));

        // I would have many of the following. All taking an IDataReader and mapping to an IEnumerable model object
        Mapper.CreateMap<IDataReader, IEnumerable<Customer>>().ConvertUsing<ModelConverter<Customer>>();
    }
}

Преобразователь:

public class ModelConverter<T>: ITypeConverter<IDataReader, IEnumerable<T>> where T: IModel
{
    public IEnumerable<T> Convert(ResolutionContext context)
    {
        var dataReader = (IDataReader) context.SourceValue;
        var rowCount = 0;
        var collection = new List<T>();

        // The purpose for this ModelConverter is the a maximum row count of 10
        while (dataReader.Read() && rowCount < 10)
        {
            var item = Mapper.Map<IDataReader, T>(dataReader);
            collection.Add(item);
            rowCount++;
        }

        return collection;
    }
}

Примечание: проблема не в классе ModelConverter, так как он никогда не вызывается, когда я передаю IDataReader. Я попробовал подобную систему сопоставления с другим классом, и она вызывается и успешно обрабатывает сопоставление.

Когда я запускаю следующий код, возвращаемое значение представляет собой список элементов с нулевыми сопоставлениями. Класс ModelConverter не вызывается вообще. Приведенный выше код работает для любого ввода, кроме IDataReader. AutoMapper делает что-то особенное с IDataReader, но я не уверен, что делать с ITypeConverter на этом этапе.

var customers = Mapper.Map<IDataReader, IEnumerable<Customer>>(dataReader);

В приведенном выше коде dataReader является объектом IDataReader.

1 ответ

Извините, преобразователи типов в настоящее время не поддерживаются для читателей данных.

Другие вопросы по тегам