База данных.NET-приложение
Многие разработчики продуктов хотят написать приложение.NET, которое будет беспрепятственно работать с любыми популярными СУБД, такими как SQL-сервер, Oracle, DB2, MySql. Если мы используем блок приложения Data, он динамически выбирает драйвер базы данных (OracleClient, SQLClient или OleDBClient) в зависимости от конфигурации.
Тем не менее, все базы данных имеют свои собственные разновидности SQL. Существуют тонкие различия, которые мешают универсальному использованию одной базы кода SQL: имена функций разные, методы обработки дат различны, методы обработки столбцов идентификаторов различны и т. Д.
Можно использовать сторонний продукт из Data Direct для написания нейтрального кода БД с использованием предопределенных escape-последовательностей.
Существуют ли какие-либо инструменты или продукты от Microsoft, которые решают эту проблему?
3 ответа
Microsoft ADO.NET Entity Framework - это структура объектно-реляционного сопоставления от Microsoft, которая позволяет вам писать код, который (в некоторой степени) не зависит от БД. Все основные СУБД поддерживают Entity Framework, хотя для многих (например, MySQL, Postgres) вам необходимо загрузить что-то отдельное от вашей установки.NET Framework.
Примечание: мне еще предстоит поработать над одним большим проектом с использованием инструмента O/RM, где не было хотя бы одного случая, когда нам приходилось выкладываться на собственный SQL- либо для функций, специфичных для БД, либо из соображений производительности написать запрос определенным способом, чтобы получить хороший план запроса). Но хороший O/RM может работать большую часть времени, чтобы избежать необходимости писать SQL.
Тем не менее, текущая версия Entity Framework довольно ограничена по ряду параметров - другие O/RM-среды, такие как NHibernate, SubSonic и т. Д., Гораздо более зрелые, где "зрелые" средства поддерживают более широкий диапазон функций СУБД без необходимость выложить на нативный SQL, более широкую поддержку сообщества, лучшую производительность и т. д.
Это мой вежливый способ сказать, что для реального, относительно сложного проекта, я не думаю, что текущая версия Entity Framework является лучшим способом перехода по сравнению с другими доступными инструментами O/RM.
По-видимому, грядущая версия Microsoft Entity Framework.NET 4.0/VS2010 значительно улучшена, поэтому приведенное выше утверждение может оказаться неверным в следующем году. Например, в новой Entity Framework добавлена поддержка DDL, поэтому вы можете создавать таблицы и индексы независимо от СУБД. Кроме того,.NET 4.0 Entity Framework использует классную функцию под названием Шаблоны T4, которая является удобной функцией для автоматической генерации кода во время сборки, что важно для таких вещей, как оболочки O/RM, которые необходимо синхронизировать с схема внешней БД - и которая должна обеспечивать лучшую (известную как предварительно скомпилированную) производительность, чем инструменты O/RM, которые не знают типы столбцов базы данных до времени выполнения.
Как я понял, вы ищете инструмент для написания независимого от СУБД SQL, но не ORM. Это очень актуальная проблема, решаемая разными поставщиками ORM по-разному. Я просто могу упомянуть инструмент Xtensive SQL DOM, который был разработан для их ORM - http://dataobjects.net/. Это абстракция над SQL, позволяющая писать запросы с использованием полнофункциональной модели DOM. На данный момент SQL DOM не продвигается отдельно от DataObjects.Net, но это продукт с открытым исходным кодом, и вы наверняка можете спросить его авторов об этом. Насколько я знаю, он успешно используется в некоторых сторонних проектах.
Не напрямую от Microsoft. Эти инструменты обычно называются объектно-реляционными мапперами или короткими ORM. Например, NHibernate - это широко распространенный ORM, который точно соответствует вашим потребностям. Конечно, есть и другие коммерческие продукты, такие как Telerik OpenAccess ORM, DevExpress XPO или RemObjects DataAbstract, которые помогут вам не зависеть от базы данных.