псевдопользователей код конфигурации отображения (как показано ниже) не представляется возможным, так как лямбда только позволяет нам доступа типа IDataReader, Тогда как когда на самом деле отображение, AutoMapper достигнет в каждой «ячейки» каждого IDataRecord
в то время как IDataReader.Read() == true
:Могу ли я настроить AutoMapper для чтения из пользовательских имен столбцов при сопоставлении с IDataReader?
var mappingConfig = Mapper.CreateMap<IDataReader, IEnumerable<MyDTO>>();
mappingConfig.ForMember(
destination => destination.???,
options => options.MapFrom(source => source.???));
Может ли кто-нибудь подумать о том, как это сделать, используя конфигурацию AutoMapper во время выполнения или просто какой-то другой динамический подход, соответствующий требованиям ниже.
Требование должно поддерживать все входящие IDataReader
которые могут иметь имена столбцов, которые не соответствуют именам свойств MyDTO
, и нет соглашения об именах, на которые я могу положиться. Вместо этого мы попросим пользователя во время выполнения перекрестно ссылаться на ожидаемые имена столбцов с фактическими именами столбцов, найденными в IDataReader
, с помощью IDataReader.GetSchemaTable()
.
+1 для очень интересного ответа. Однако он еще не удовлетворяет требованиям, поскольку он все еще ожидает, что имя столбца будет соответствовать имени свойства. Спасибо за хедз-ап по ValueInjecter в любом случае. – rohancragg
@rohancragg у вас есть все имена свойств из объекта (targetProps), и вы можете получить все имена из datareader (source.GetName (theName)), так что вы можете изменить его в соответствии с вашими потребностями – Omu
@rohancragg Я отредактировал мой вопрос, я думаю, что этот способ должен работать (я не пробовал, но надеюсь) – Omu