2009-04-25 11 views

答えて

4

ここでは、複数のデータベースをサポートするORMを使用します。たとえば、NHibernateまたはEntity frameworkのいずれかを見ることができます。両方とも、OracleサーバーとSQLサーバーがサポートされています。そうすれば、どちらのDBMSでもアプリケーションを動作させるためには、データベースマッピングをスワップアウトしなければなりません。

編集 - tvanfossonのおかげで、nhibernateの '新しい'リンクが追加されました。

2

私は、nHibernateのような既存の(無料の)フレームワークを使用することをお勧めします。これはデータベースの依存関係を抽象化しています。あるいは、2つのデータベースのいずれかのドライバと対話できる独自の抽象レイヤを定義する必要があります。

+0

+1 nhforge.org、便利なリンク - 私は何とか前にそれを見たことがない! –

0

私はOR/Mを使用します。これらのほとんどは多くの異なるデータベースベンダーをサポートしており、クエイングなどを行うためのデータベースにとらわれない言語を持っています。

私はNHibernate for C#をお勧めします。

+0

ああ...あまりにも遅く:) – asgerhallas

1

他の回答の補足として、ADO.NetのDbProviderFactoriesアーキテクチャを見てみましょう。ちょっとプロファイルは少なくても便利かもしれません。

1

多くの人が指摘しているように、ORMを使用すると問題が解決する可能性があります。私はLLBLGenを大成功に使用しました。また、IConnection、ICommandなどのインタフェースを使用して独自のConnectionFactoryをロールバックすることもできます。

4

ORMコメントに加えて、時には人生はそれほど単純ではありません。

テーブル、ビュー、およびストアドプロシージャを生成するためのスクリプトは、両方のシステムで異なるため、別々のスクリプトを保持する必要があります。

1つのデータベースプラットフォームに固有のパフォーマンス上の理由から、何かをする必要があるかもしれません。たとえば、Oracleで新しいパーティションを作成します。

ビューまたはストアドプロシージャでカプセル化することで、このレベルで実行するようにしてください。

クライアントコードは、任意のデータベースで同じ署名を持つストアドプロシージャを呼び出すことができます。あなたは、そのデータベースが必要とするものに応じて何もしないか、または多くを実行するストアドプロシージャを書くことができます。

+0

あなたはそうです。データベースの両方のための最も完璧な時間のquerysと書くスクリプトを細かくチューニングすることが必要です。マルチdb対応のアプリでは初めてだと思うので、プロジェクトのために2つの異なるブランチを持つ方が簡単かどうか評価しています。 – Jonathan