Я бы вообще отнес это к плохой или, по крайней мере, плохой практике. Стоимость отражения зависит от нескольких степеней, самая высокая из которых - это вызов (то есть вызов метода, получение или установка значения свойства / поля и т. Д.). Сохраняя свой объект с помощью такого отражения, вы несете очень высокую стоимость. Мы говорили на несколько порядков медленнее, чем прямой доступ к свойствам.
Помимо затрат на отражение, это также, как правило, плохая практика с точки зрения намерения. Вы сохраняете ВСЕ свойства ... но что происходит, когда кто-то создает производный тип, свойства которого не отображаются в столбце таблицы базы данных? Вы должны сделать свой метод сохранения виртуальным или абстрактным, а также реализовать / расширить метод по мере необходимости для каждой сущности.
В заключение: обработка сбережений непосредственно на объекте, подобном этому, - настоящий кошмар обслуживания, ожидающий своего появления. Вы спрашиваете об АД много проблем, поскольку вы объединяете проблемы и обязанности в одном классе. Вам было бы гораздо лучше сделать ваши объекты / бизнес-объекты POCO (обычные старые объекты clr) и написать явные средства отображения данных. Это разделит ваши проблемы и уменьшит обязанности каждого класса до как можно меньшего числа. Богатые, самосохраняющиеся (и загружаемые) сущности удобны, но в основном это мечта. На практике они, как правило, не стоят того небольшого преимущества, которое они предлагают, в свете гораздо больших трудностей в обслуживании, которые у вас будут.
Я рекомендую изучить мапперы OR (LINQ to SQL, nHibernate, Entity Framework v4 и т. Д.) ИЛИ мапперы автоматически генерируют SQL для вас, когда вам нужно загрузить, сохранить или удалить сущности. Они могут исключить значительное количество дополнительного кодирования, необходимого, когда вы не используете OR, и поддерживать гораздо более адаптируемую кодовую базу.