1

Entity Framework を使用して、モデル化されたデータベースからデータを読み取ることができるアプリケーションを作成しました。現在、別のサーバーでホストされている同じテーブルを持つ別のデータベースがあります。

問題は、2 番目のデータベースのテーブルが元の名前とは異なる名前のスキーマに属しているため、app.config ファイルでコンテキストの接続文字列を変更するだけでは機能しないことです。(「テーブルまたはビューが存在しません」というエラーが表示されます)。元のスキーマ名を示す自動生成コードのどこかにマッピングが必要です。

この種の状況を処理する正しい方法は何ですか? 最初のデータベースと同一であるため、2 番目のデータベースを再モデル化する必要はありません。他のアプリケーションが動作しなくなるため、データベースを変更できません。

正しい方向への微調整は大歓迎です。

4

1 に答える 1

0

OK、これを解決するために私がしたことは次のとおりです。

@Kelmen がコメントで述べたように、テキスト エディターで EDMX ファイルを開くと、スキーマ情報が保存されている場所であることがわかりました。したがって、スキーマ属性の値を単純に消去し、接続文字列を使用してスキーマを駆動することもできたと思います。

これは、いくつかの理由で適切ではないと感じました。

  1. モデルが任意の時点で更新された場合、スキーマ名が再設定されている可能性があり、これは非常に面倒です。これが実際に起こるかどうかをテストする時間はありませんでした。

  2. このメソッドでは、実行時にスキーマ名を変更する必要がある場合、スキーマ名を制御できません。

解決策は、Code First と Fluent API を使用して、派生した DbContext クラス内の OnModelCreating イベントでモデル構成を編集することでした。

現在、スキーマの名前を渡すか、app.config からスキーマを駆動できるように、コンテキスト クラスを変更することを検討しています。

リンクのチュートリアルが非常に役立つことがわかりました。

Entity Frameworkのスキーマ変更

接続ごとのEntity Framework変更スキーマ名

于 2013-04-29T20:09:44.847 に答える