Одним из требований приложения ASP.NET, которое я разрабатываю, является database-agnostic; то есть иметь возможность говорить с количеством двигателей баз данных без необходимости внесения существенных изменений в код. Я уже знаю, что первая часть решения включает абстрагирование DAL (уровня доступа к данным) за интерфейсом, и это позволяет заменить DAL без изменений кода, но проблема, с которой я столкнулась, заключается в том, как реализовать DAL.Абонентское приложение ASP.NET?
Исследование было очень неубедительны в этом отношении, но он говорит мне, что у меня есть 2 варианта:
- Использование ОРМ (например, Entity Framework или Dapper)
- Пишущие его полностью в ADO.NET
Entity Framework прост, но кажется, что, как только я сгенерирую модель, EF не позволит мне изменить двигатель БД, на который он нацелен. OTOH, записывая много DAL в ADO.NET (по одному для каждого целевого движка), позволяет мне эту гибкость, но я застрял в написании всего с нуля.
Так что у меня следующие вопросы:
- Есть ли способ, чтобы сделать EF поговорить с различными двигателями DB на время выполнения?
- Если нет, существует ли зрелая, стабильная ORM, которая поддерживает несколько двигателей БД на лету?
Заранее спасибо.
Я не уверен, что именно вы подразумеваете под «во время выполнения» и «на лету». Помимо Entity Framework, Dapper и основного ADO.NET, NHibernate является альтернативой. Он поддерживает почти каждую используемую базу данных. Это помогает значительно отделить уровень доступа к данным от вашей бизнес-логики или уровня приложения. Он широко используется и активно развивается. Отрицательным моментом является его кривая обучения. –