Я пытаюсь преобразовать 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;
}
}
Тогда не используйте AutoMapper. Используйте LINQ для выбора коллекции отдельных элементов. – krillgar
Я предпочел бы не писать отдельно для каждого DTO, у которого могут быть разные поля. Тем не менее, каждый DTO будет соответствовать DataTable, который будет восстановлен с помощью хранимой процедуры. –
Можете ли вы использовать Entity Framework? Это поддерживает выполнение хранимой процедуры и автоматически перевод ее в объект C#. Я абсолютно уверен, что вам придется создавать настройки AutoMapper для каждого используемого DTO. – krillgar