4

同じコードを使用して異なるクライアントデータベースと通信するシステムがあります。これらのデータベースは同じEFモデルを使用しますが、接続文字列は異なります。

私たちの問題は、すべてのサイトが同じバージョンのデータベース構造を使用しているわけではないということです。一部の列が欠落しているか、古い列がいくつか含まれている可能性があります。

システムを現在のバージョンにアップグレードすると、データベースモデルに追加のEmergencyContact列が追加されます。EFがこの列に挿入しようとしているため(このプロパティの値を設定していなくても)、古いデータベースはすべて失敗します。

INSERT INTOクエリを生成するときに、値を持つ列のみを使用するようにEFに指示する方法はありますか?

4

3 に答える 3

0

EFは、実際のデータベースにある列がスキーマにない場合は問題ありませんが、データベースにない列がスキーマにある場合は機能せず、それを修正する方法はありません。

唯一の選択肢は、データベースごとに異なるスキーマを使用し、それらを管理するコードを作成することです(つまり、必要なコンテキストのバージョンのみをインスタンス化します)。

于 2012-10-08T16:20:53.857 に答える
0

モデルがデータベーススキーマと一致しない場合、EFはモデルの列のみを挿入/更新します。ただし、不明な列がnullでない場合、EFは例外をスローします。また、不明な列にリレーショナル制約を作成した場合、それらはまだ不明であるため、もちろん作成されません。

于 2012-10-08T14:56:39.137 に答える
0

サイトごとの永続層が変更される唯一の部分である場合、EFモデルを独自のバージョンに抽出します。

DbV1.dll
DbV2.dll

次に、クライアントからの設定に基づいて適切なDLLをロードできます。つまり、情報をカスタムヘッダーとして渡すことができます。

db-version: 1

他にも信頼できる方法がありますが、現在の設定がどのようなものかわからないため、答えるのは難しいです。

于 2012-10-08T15:28:28.920 に答える