2017-01-12 2 views
1

Я пытаюсь преобразовать DataTable, полученный с помощью Ado.Net в DTO. DTO передаваемого типа «T» имеет точно такое же поле и тот же тип данных, что и DataTable, но я получаю исключение ниже:Auto Mapper - отображение DataTable в общий тип (для DTO) не работает

Это выполнимо? У Brady Holt у geekytidbits есть старая статья, чтобы сделать следующее, но DynamicMap устарел!

Список людей = AutoMapper.Mapper.DynamicMap> ( sourceDataTable.CreateDataReader());


Неотсортированные участники были найдены. Просмотрите типы и элементы ниже. Добавьте выражение пользовательского отображения, игнорировать, добавить пользовательский распознаватель или изменить тип источника/назначения

IDataReader -> UserDto (список член назначения) System.Data.IDataReader -> MyApp.Console.UserDto (список членов назначения)

неотображённые свойства: UserId // ИНТ типа FirstName // строковый тип LastName // строка типа


код ниже:

public static class DtoTransformDataTable<T> 
{ 
    public static IEnumerable<T> JustDoIt(DataTable dt) 
    { 
       var config = new MapperConfiguration(cfg => 
     { 
      cfg.CreateMap<IDataReader, IEnumerable<T>>(); 
     }); 

       var mapper = config.CreateMapper(); 

       try 
       { 
        mapper.ConfigurationProvider.AssertConfigurationIsValid(); 
       } 
       catch (Exception ex) 
       { 
        throw ex; 
       } 

       var listOfT = mapper.Map<List<T>>(dt.CreateDataReader()); 

     return listOfT; 
    } 
} 
+1

Тогда не используйте AutoMapper. Используйте LINQ для выбора коллекции отдельных элементов. – krillgar

+0

Я предпочел бы не писать отдельно для каждого DTO, у которого могут быть разные поля. Тем не менее, каждый DTO будет соответствовать DataTable, который будет восстановлен с помощью хранимой процедуры. –

+0

Можете ли вы использовать Entity Framework? Это поддерживает выполнение хранимой процедуры и автоматически перевод ее в объект C#. Я абсолютно уверен, что вам придется создавать настройки AutoMapper для каждого используемого DTO. – krillgar

ответ

0

В другом сообщении кто-то говорит, что поддержка IDataReader была удалена из Automapper 4.0 вверх.

Но я нашел ответ на SO

Смежные вопросы