Pseudo codice per la configurazione di mapping (come sotto) non è possibile in quanto il lambda ci permette solo l'accesso Tipo IDataReader, wheras quando in realtà la mappatura, automapper raggiungerà in ogni "cella" di ogni IDataRecord
mentre IDataReader.Read() == true
:Posso configurare AutoMapper per leggere dai nomi di colonne personalizzate durante il mapping da IDataReader?
var mappingConfig = Mapper.CreateMap<IDataReader, IEnumerable<MyDTO>>();
mappingConfig.ForMember(
destination => destination.???,
options => options.MapFrom(source => source.???));
Qualcuno può pensare a un modo per farlo utilizzando la configurazione di AutoMapper in fase di esecuzione o solo qualche altro approccio dinamico che soddisfi i requisiti di seguito.
L'esigenza è di supportare qualsiasi IDataReader
in arrivo che potrebbe avere nomi di colonna che non corrispondono ai nomi di proprietà di MyDTO
e non esiste alcuna convenzione di denominazione su cui fare affidamento. Invece chiederemo all'utente in fase di runtime di fare un riferimento incrociato ai nomi delle colonne attese con i nomi delle colonne effettivi trovati nello IDataReader
tramite IDataReader.GetSchemaTable()
.
+1 per una risposta molto interessante. Tuttavia non soddisfa (ancora) il requisito in quanto si aspetta ancora che il nome della "colonna" corrisponda al nome della proprietà. Grazie comunque per l'Head-up su ValueInjecter. – rohancragg
@rohancragg hai tutti i nomi delle proprietà dall'oggetto (targetProps) e puoi ottenere tutti i nomi dal datareader (source.GetName (theName)), quindi puoi modificarlo in base alle tue esigenze – Omu
@rohancragg Ho modificato la mia domanda, penso che in questo modo dovrebbe funzionare (non l'ho provato, ma lo spero) – Omu