Code Psuedo pour la configuration de la cartographie (comme ci-dessous) n'est pas possible car le type lambda nous permet d'accéder uniquement IDataReader, wheras alors qu'en réalité, la cartographie, AutoMapper atteindra dans chaque "cellule" de chaque IDataRecord
en IDataReader.Read() == true
:Puis-je configurer AutoMapper pour lire les noms de colonnes personnalisés lors du mappage à partir d'IDataReader?
var mappingConfig = Mapper.CreateMap<IDataReader, IEnumerable<MyDTO>>();
mappingConfig.ForMember(
destination => destination.???,
options => options.MapFrom(source => source.???));
Quelqu'un peut-il penser à un moyen de le faire en utilisant la configuration AutoMapper au moment de l'exécution ou juste une autre approche dynamique qui répond aux exigences ci-dessous.
L'exigence est de prendre en charge tous les IDataReader
entrants qui peuvent avoir des noms de colonne qui ne correspondent pas aux noms de propriété de MyDTO
et il n'y a pas de convention de dénomination sur laquelle je peux compter. Au lieu de cela, nous demanderons à l'utilisateur lors de l'exécution de renvoyer les noms de colonne attendus avec les noms de colonne réels trouvés dans le IDataReader
via IDataReader.GetSchemaTable()
.
+1 pour une réponse très intéressante. Cependant, il ne répond pas (encore) à l'exigence car il s'attend toujours à ce que le nom de la colonne corresponde au nom de la propriété. Merci pour le heads-up sur ValueInjecter de toute façon. – rohancragg
@rohancragg vous avez tous les noms de propriété de l'objet (targetProps) et vous pouvez obtenir tous les noms de la tête de lecture (source.GetName (theName)), de sorte que vous pouvez le modifier en fonction de vos besoins – Omu
@rohancragg J'ai modifié ma question, je pense que cette façon devrait fonctionner (je ne l'ai pas essayé, mais je l'espère) – Omu