2009-11-08 5 views
5

Многие разработчики продуктов хотят написать приложение .NET, которое будет работать без проблем с любыми популярными RDBMS, такими как SQL-сервер, oracle, DB2, MySql. Если мы используем блок данных Data, он динамически выбирает драйвер базы данных (OracleClient, SQLClient или OleDBClient) на основе конфигурации.База данных нейтральная .NET-приложение

Однако все базы данных имеют свои собственные особенности SQL. Существуют тонкие различия, которые не позволяют использовать одну базу SQL-кода повсеместно - имена функций различны, то, как обрабатываются даты, различается, как обрабатываются столбцы Identity, и так далее.

Можно использовать сторонний продукт Data Direct для записи нейтрального кода DB с использованием предопределенных управляющих последовательностей.

Есть ли какие-либо инструменты или продукты от Microsoft, которые решают эту проблему?

ответ

12

Microsoft ADO.NET Entity Framework является каркасом Object-Relational Mapping от Microsoft, который предназначен для написания кода, который является (несколько) DB-агностиком. Все основные СУБД поддерживают платформу Entity Framework, хотя для многих (например, MySQL, Postgres) вам необходимо загрузить что-то отдельно от вашей установки .NET Framework.

Примечание: Мне еще предстоит работать над одним крупным проектом с использованием инструмента O/RM, где не было хотя бы одного случая, когда нам приходилось обходить исходный SQL - либо для конкретных функций DB, либо для (необходимо написать запрос определенным способом, чтобы получить хороший план запроса). Но хороший O/RM может работать большую часть времени, чтобы не писать SQL.

Тем не менее, текущая версия Entity Framework довольно ограничена в ряде измерений - другие фреймы O/RM, такие как NHibernate, SubSonic и т. Д., Гораздо более зрелые, где «зрелые» средства поддерживают более глубокий диапазон возможностей СУБД без необходимости распространять на собственный SQL, более широкую поддержку сообщества, лучшую производительность и т. д.

Это мой вежливый способ сказать, что для реального сложного проекта я не думаю, что текущая версия Entity Framework - лучший способ перейти к другим доступным инструментам O/RM.

Судя по всему, предстоящий .NET 4.0/VS2010 version of the Microsoft Entity Framework значительно улучшен, поэтому приведенное выше утверждение может быть неверным в следующем году. Например, новая платформа Entity Framework добавляет поддержку DDL, поэтому вы можете создавать таблицы и индексы независимо от СУБД. Кроме того, .NET 4.0 Entity Framework использует классную функцию под названием T4 Templates, которая является опрятной функцией автоматического генерации кода во время сборки, что важно для таких вещей, как O/RM-обертки, которые необходимо синхронизировать с внешним DB, и которая должна давать лучшую (ака предварительно скомпилированную) производительность, чем инструменты O/RM, которые не знают типы столбцов базы данных до времени выполнения.

+0

+1 Хороший и всеобъемлющий ответ. Возможно, стоит отметить, что в настоящее время EF поддерживает только РСУБД. Это то, о чем спрашивал ОП, поэтому у меня нет проблем с вашим ответом, но я просто хочу указать, что EF не поможет вам, если вам вдруг понадобится доступ к данным через службу RESTful, или orter non-relational источники данных. –

+0

EntityFramework не работает с Informix (собственная база данных сатаны) –

1

Непосредственно из Microsoft. Эти инструменты обычно называются Object-Relational Mappers или короткие ORM. NHibernate, например, является распространенным и широко используемым ORM, который очень точно соответствует вашим потребностям. Конечно, существуют и другие коммерческие продукты, такие как Telerik OpenAccess ORM, DevExpress XPO или RemObjects DataAbstract, которые помогут вам стать агностиком базы данных.

+0

Здесь * есть ORM непосредственно от MS: Entity Framework. –

+0

Еще один аспект ORM - это не просто «стандартный» SQL, который можно использовать, но и огромное количество кода шаблона, который вы можете сохранить (транзакция и обработка LOB, чтобы назвать только две вещи, которые приходят на ум). – davek

2

Как я понял, вы ищете инструмент для написания независимого от РСУБД SQL, но не ORM. Это очень актуальная проблема, решаемая разными поставщиками ORM по-разному. Я просто могу упомянуть XtensiveSQL DOM tool, который был разработан для ORM - DataObjects.Net. Это абстракция над SQL, позволяющая писать запросы с использованием полнофункциональной модели DOM. На данный момент SQL DOM не продвигается отдельно от DataObjects.Net, но это продукт с открытым исходным кодом, и вы наверняка можете спросить его авторов об этом.Насколько я знаю, он успешно используется в некоторых сторонних проектах.

Смежные вопросы