私が取り組んでいる製品は、さまざまなデータベース タイプをサポートする必要があります。最初はSQL ServerとOracleをサポートする必要がありますが、将来的にはIBM DB2とPostgre SQLをサポートする必要があるかもしれません。
また、製品は、スキーマがわずかに異なるさまざまな顧客に対して機能する必要があります。たとえば、SQL Serverを使用するあるクライアントでは列名が であり、 Oracle_ID
を使用する別のクライアントでは列名が.I_ID
一般的なスキーマは、列名を除いて同じです。それらはすべて、潜在的に同じオブジェクトにマップされる可能性があります。ただし、各顧客に固有の追加の列がいくつかある場合があります。ただし、これらをオブジェクトにマップする必要はありません。これらは、より簡単な方法を使用してマスター/ディテールシナリオで取得できます。
さまざまな種類のデータベース プロバイダーをサポートする必要があるため、ORM を使用したかったのです。しかし、私が理解できる限り、ORM は実行時にマッピングを作成するのには適していません。
これらの要求をサポートするには (概要):
- 列名は顧客ごとに異なる場合がありますが、名前以外はほとんど同じ列です。
- データベース プロバイダーは、お客様ごとに異なる場合があります。
- 顧客ごとに追加の列がある場合があります。
- 編集:実行時に構成を変更することにより、プログラムは新しいデータベースをサポートできるはずです。
このような仕様のデータ アクセスを作成する良い方法は何ですか? ORMでそれを行う方法はありますか? または、このシナリオをサポートするために、各データベースに固有のコードを記述する必要がありますか? ADO.NET を直接使用するよりも簡単にする他のオプションはありますか?
編集:質問を少し広範に書きすぎたようで、明確に説明していませんでした。申し訳ありません。問題は、データベースを作成しないことです。それらはすでに作成されており、実行時にプログラムを構成することにより、プログラムは新しいデータベースで動作できるはずです。私はデータベースを制御できません。
もう 1 つは、プログラム内で SQL ステートメントを作成することでもちろん可能ですが、それは非常に面倒です。これらのプロバイダーはすべて、わずかに異なるルールと異なる SQL 実装を持っているため、多くの作業が必要です。ORM のようなものを使用して簡単にできるのではないかと考えていました。
編集 2:これはばかげたやり方であり、設計上の決定が悪いことを示していることは十分承知しています。しかし、私は会社にこのようなことをしないよう説得するのに何時間も費やしました. インターンに言われたからといって、考え方を変えたくない。そのため、どんな助けもいただければ幸いです。