Многие люди предложили структуру отображения O / R, такую как NHibernate. Это вполне разумный подход, если вы по какой-то причине не хотите использовать O / R mapper. Что-то вроде NHibernate, вероятно, даст вам 95% + пути, но вам может потребоваться написать собственный SQL. Не паникуйте, если это так; Вы все еще можете сделать специальное решение для остальных.
В этом случае возьмите биты, для которых действительно нужен пользовательский SQL, и выделите их в модуль плагина для конкретной платформы. Напишите плагины Oracle, MySQL, SQL Server (и т. Д.) По мере необходимости для отдельных платформ баз данных, которые вы хотите поддерживать.
ADO.Net упрощает упаковку sprocs, поэтому вы можете переместить зависимый от платформы уровень в некоторые хранимые процедуры, предоставляя более или менее согласованный API для среднего уровня. По-прежнему существуют некоторые зависимости от платформы (например, префикс «@» в именах переменных SQL Server), поэтому вам необходимо создать универсальный механизм обертки sproc (что не так уж сложно).
Если повезет, определенные операции, которые вам понадобятся , чтобы выполнить их таким образом, будут довольно малы, поэтому объем работ по обслуживанию плагинов будет ограничен.