2016-12-08 57 views
2

Одним из требований приложения ASP.NET, которое я разрабатываю, является database-agnostic; то есть иметь возможность говорить с количеством двигателей баз данных без необходимости внесения существенных изменений в код. Я уже знаю, что первая часть решения включает абстрагирование DAL (уровня доступа к данным) за интерфейсом, и это позволяет заменить DAL без изменений кода, но проблема, с которой я столкнулась, заключается в том, как реализовать DAL.Абонентское приложение ASP.NET?

Исследование было очень неубедительны в этом отношении, но он говорит мне, что у меня есть 2 варианта:

  • Использование ОРМ (например, Entity Framework или Dapper)
  • Пишущие его полностью в ADO.NET

Entity Framework прост, но кажется, что, как только я сгенерирую модель, EF не позволит мне изменить двигатель БД, на который он нацелен. OTOH, записывая много DAL в ADO.NET (по одному для каждого целевого движка), позволяет мне эту гибкость, но я застрял в написании всего с нуля.

Так что у меня следующие вопросы:

  1. Есть ли способ, чтобы сделать EF поговорить с различными двигателями DB на время выполнения?
  2. Если нет, существует ли зрелая, стабильная ORM, которая поддерживает несколько двигателей БД на лету?

Заранее спасибо.

+0

Я не уверен, что именно вы подразумеваете под «во время выполнения» и «на лету». Помимо Entity Framework, Dapper и основного ADO.NET, NHibernate является альтернативой. Он поддерживает почти каждую используемую базу данных. Это помогает значительно отделить уровень доступа к данным от вашей бизнес-логики или уровня приложения. Он широко используется и активно развивается. Отрицательным моментом является его кривая обучения. –

ответ

0

Похоже, что это возможно с каркасом объекта - Same EDMX file for different Providers

Однако, для меня это звучит как рецепт для катастрофы. Я бы сам написал его с помощью ANSI SQL, убедившись, что мои таблицы, столбцы и типы данных во всех БД совпадают и имеют одинаковое поведение, а также внешние ключи, автоматическое создание ключей и т. Д. Затем проверяйте все и пересекайте мои пальцы.

+0

Так что я довольно сильно застрял с ADO.NET и ANSI SQL? К счастью для меня, мне не нужно использовать много специальных функций (в лучшем случае, представления и хранимые процедуры, которые я могу абстрагировать за DAL в любом случае). Единственное, что я пропущу, это поддержка EF для FK. –