Вопрос

Многие разработчики продуктов хотят написать приложение .NET, которое будет работать без проблем с любыми популярными RDBM, такими как SQL Server, Oracle, DB2, MySQL. Если мы используем приложение Data Block, он динамически выбирает драйвер базы данных (Oracleclient, SQLClient или OLEDBClient) на основе конфигурации.

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

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

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

Это было полезно?

Решение

А Microsoft Ado.net Entity Framework является Объектно-реляционное картирование Framework от Microsoft, которая предназначена для того, чтобы позволить вам написать код, который (несколько) DB-агрессия. Все основные СУПП имеют поддержку фреймворта сущности, хотя для многих (EG MySQL, Postgres) вам нужно будет загрузить что -то отдельное от вашей установки .NET Framework.

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

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

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

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

Другие советы

Как я понял, вы ищете инструмент для написания RDBMS-независимого SQL, но не ORM. Это очень реальная проблема, решаемая разными поставщиками ORM по -разному. Я просто могу упомянуть Xtneny SQL Dom Инструмент, который был разработан для их ORM - DataObjects.net. Анкет Это абстракция над SQL, позволяющая записывать запросы с использованием полнофункциональной модели DOM. В этот момент SQL DOM не продвигается отдельно от DataObjects.net, но это продукт с открытым исходным кодом, и вы, несомненно, можете спросить его авторов об этом. Насколько я знаю, он успешно используется в некоторых сторонних проектах.

Не прямо из Microsoft. Эти инструменты обычно называют объектно-релационными картерами или коротким ORM. Например, Nhibernate является распространенным и широко используемым ORM, который очень наверняка соответствует вашим потребностям. Конечно, существуют другие коммерческие продукты, такие как Telerik OpenAccess ORM, DevExpress XPO или Remobjects DataBstract, которые помогут вам стать агностикой базы данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top