Вы запрашиваете три разные вещи:
они не то же самое! самый быстрый (при исполнении) будет скомпилирован код; т. е. вы регулярно пишете C#, чтобы правильно установить свойства. Легче, чем использование рефлексии, но это медленное. Вам также потребуется некоторый механизм для отображения дочерних свойств ... (а также отображение регулярных свойств, если между читателем не существует соответствия 1: 1). Это, пожалуй, лучше всего разрешено с помощью настраиваемых атрибутов для членов (свойства/поля).
В качестве компромисса по скорости (над отражением) вы можете использовать Delegate.CreateDelegate для доступа к средствам настройки свойств, но это большая работа. Возможно, другой вариант: HyperDescriptor; это позволяет отражать доступ, но значительно быстрее.
Лучшее? Вероятно, использовать существующий код - то есть инструмент ORM; меньше писать и отлаживать.
Отражение создает проблему, когда имя столбца не соответствует объекту, соответствующему названию свойства. – sduplooy
Если вы не указали сопоставление между именами столбцов и именами свойств, вы не сможете достичь того, чего хотите. Указание такого сопоставления приводит к созданию пользовательского ORM или использованию существующего. – sangupta