1. ホーム
  2. c#

[解決済み] ストアドプロシージャとEDMXの更新

2023-04-15 10:04:46

質問

ストアドプロシージャと EDMX で果てしない問題が発生しました。私はプロシージャを作成し、データベースからモデルを更新し、すべてがうまくいきました。その後、ストアドプロシージャで列を削除し、新しい列を追加しました。モデルを更新しましたが、EDMX はプロシージャ定義を更新しないようでした。

プロシージャーを削除して、更新を行いましたが、プロシージャーへのすべての参照を手動で削除する必要がありました。結局、プロックの名前を変更し、データベースからモデル更新を介してインポートすることにしました。

ちょうど同じ問題がありました。新しい列を追加し、既存の列の名前を変更しました。データベースからモデルの更新を介して EDMX を更新しましたが、EDMX には何の変更もなく、明らかに実行時に失敗しています。Entity Frameworkでストアドプロシージャの更新はどのように行われるべきですか?

プロシージャを削除し、モデルを再生成し、プロシージャの 'cs' ファイルを削除し、コンパイルし、そして再びデータベースにプロシージャを追加し、モデルを再生成したら、バン!です。同じモデルが3回追加され、最後の1回だけが正しいのです。なぜ古いバージョンが戻ってくるのでしょうか?

どのように解決するのですか?

(この解決策はEF 6のものです。他のEFのバージョンでは試していません。いい感じに動作しています)


モデルブラウザに移動します。 MyStoreProcはストアドプロシージャの名前です(例として)。MyStoreProcは3か所に表示されます。

  1. 1位 - 複雑な型の下 - MyStoreProc_resultと表示されます。
  2. 2位 関数のインポート -> MyStoreProcとして
  3. 3位 - ストアドプロキュア/関数の下 プロシージャ/関数 -> MyStoreProcとして。

モデルから3つとも削除します。 edmxを保存します(ウィンドウをクリックし、ctrl+Sで)。次に右クリックし、データベースからモデルを更新するをクリックします。そして、更新されたストアドプロシージャを追加し、再度保存します。

特に面倒なこともなく解決しました :)