Мне нужен строго типизированный DataSet вместе с конструктором TableAdapter, но конструктор DataSet в Visual Studio генерирует специфичный для провайдера код (например, SQL Server против MySql), и я не хочу фиксировать только одного провайдера. ORM поможет, но:
- Entity Framework версии 3.5 и не очень хорошо работает с DataSets, а
- NHibernate не поддерживает SQLite.
Вот что я придумала:
«DataSets.Masters» содержит полностью разработанный DataSet, привязанный к какому-либо конкретному поставщику (например, SqlClient), в том числе:
- a CustomTableAdapter компонент, подкласс каждого разработчика TableAdapter ,
- и ITableAdapterManager интерфейс, реализованный дизайнером TableAdapterManager для иерархических обновлений.
Все , кроме DataSets.MyDataSetTableAdapters Пространство имен копируется в проект «DataSets», где удаляется весь код TableAdapter (вместе с аннотацией xs:).
Пространство имен DataSets.MyDataSetTableAdapters вместе с MyDataSet.xsd и т. Д. Копируется и настраивается в каждый из «DataSets.SqlClient», «DataSets.SQLite» и т. Д., Каждый из которых ссылается на « Сборка "Наборы данных".
Теперь мне просто нужно выбрать правильную сборку для загрузки моей реализации ITableAdapterManager , основываясь на любой заданной строке соединения. Когда схема таблицы изменяется, я изменяю сборку Masters, копирую код в производственные сборки и запускаю несколько тестов.
Итак, мой вопрос: я делаю это слишком сложным? Наборы данных настолько стандартны, и необходимость поддержки нескольких механизмов баз данных через уровень доступа к данным является настолько распространенной. Существует ли метод, который не включает копирование, вставку, поиск и замену? Что вы делаете?