質問

多くの製品開発者は、SQL Server、Oracle、DB2、MySQLなどの一般的なRDBMでシームレスに動作する.NETアプリケーションを作成したいと考えています。データアプリケーションブロックを使用すると、構成に基づいてデータベースドライバー(OracLeclient、SQLClient、またはOledBClient)を動的に選択します。

ただし、すべてのデータベースには、SQLの独自のフレーバーがあります。 1つのSQLコードベースが普遍的に使用されるのを防ぐ微妙な違いがあります - 関数名は異なり、日付の処理方法は異なり、アイデンティティ列の処理方法は異なります。

Data Directのサードパーティ製品を使用して、事前定義されたエスケープシーケンスを使用してDBニュートラルコードを書き込むことができます。

この問題に対処するMicrosoftのツールや製品はありますか?

役に立ちましたか?

解決

Microsoft ADO.NET Entity Framework です オブジェクトリレーショナルマッピング Microsoftのフレームワークは、(やや)DBに依存しないコードを作成できるように設計されています。すべての主要なDBMSはエンティティフレームワークをサポートしていますが、多くの人(mysql、postgres)にとって、.netフレームワークのインストールとは別のものをダウンロードする必要があります。

注:私は、DB固有の機能またはパフォーマンス上の理由で、ネイティブSQLにシェルアウトしなければならなかった少なくとも1つのケースがなかったO/RMツールを使用して、単一の大規模プロジェクトにまだ作業していません(必要です良いクエリ計画を取得するために特定の方法でクエリを書くため)。しかし、優れたO/RMはほとんどの場合、SQLの書き込みを防ぐために機能します。

とはいえ、エンティティフレームワークの現在のバージョンは、多くの次元でかなり制限されています。 nhibernate, 亜音速, 、などははるかに成熟しており、「成熟」とは、ネイティブSQL、より広いコミュニティサポート、パフォーマンスの向上など、より深いDBMS機能をサポートすることを意味します。

これは、現実世界の比較的複雑なプロジェクトにとって、現在のエンティティフレームワークの現在のバージョンが利用可能な他のO/RMツールに関連する最良の方法であるとは思わないという私の丁寧な方法です。

どうやら、今後の .NET 4.0/VS2010マイクロソフトエンティティフレームワークのバージョン 大幅に改善されているため、上記の声明は来年も当てはまらないかもしれません。たとえば、新しいエンティティフレームワークはDDLのサポートを追加するため、DBMSに依存しない方法でテーブルとインデックスを作成できます。また、.NET 4.0エンティティフレームワークは、呼ばれるクールな機能を活用しています T4テンプレート, 、これはビルド時に自動生成コードのきちんとした機能です。これは、外部DBスキーマと同期して保持する必要があり、より良くなるはずのO/RMラッパーのようなものにとって重要です。実行時までデータベース列の種類を知らないO/RMツールよりもパフォーマンス。

他のヒント

私が理解しているように、あなたはRDBMSに依存しないSQLを書くためのツールを探していますが、ORMではありません。これは、さまざまな方法で異なるORMベンダーによって解決される非常に実際の問題です。言及することができます Xtensive SQL DOM ツール、それは彼らのormのために開発されました - dataObjects.net. 。これは、SQLを介した抽象化であり、フル機能のDOMモデルを使用してクエリを書き込むことができます。この瞬間、SQL DomはdataObjects.netとは別に宣伝されていませんが、それはオープンソース製品であり、著者にそれについて尋ねることができます。私が知る限り、それはいくつかのサードパーティのプロジェクトで成功裏に使用されています。

Microsoftから直接ではありません。これらのツールは、一般的にオブジェクトリレーショナルマッパーまたは短いORMという名前です。たとえば、Nhibernateは一般的で広く使用されているORMであり、あなたのニーズに合わせて確実に適合しています。もちろん、Telerik OpenAccess ORM、DevexPress XPO、またはDataBstractの再抽出など、データベースの不可知論になるのに役立つ他の商用製品があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top