3

モデルファーストでEF 4を使用しています...モデルからデータベースを生成します。そのシナリオでストアドプロシージャを使用するにはどうすればよいですか? また、データベースで自動生成する必要があります..?

4

2 に答える 2

4

最初にモデルを持つストアド プロシージャはなく、生成されません。彼らはどうしてでしょうか?ストアド プロシージャはデータベースで定義されたロジックであり、EF はそのプロシージャを認識していないため、ストアド プロシージャを作成することはできません。

ストアド プロシージャを使用する場合は、モデルからデータベースを作成し、最初にデータベースにスワップします。次に、手順を手動で定義してモデルにマップできます。それを行うと、最初にモデルに戻ることはできません。

編集:

おそらくもう1つの解決策がありますが、それは良くありません。すべてのストアド プロシージャでカスタム SQL スクリプトを維持し (とにかくそれらを記述する必要があります)、データベース作成のワークフローを変更して、データベースの作成後にスクリプトを実行します。モデルは最初に T4 テンプレートを使用して SQL を生成し、Workflow Foundation 4 を使用してデータベース作成の全プロセスを処理します。T4 テンプレートとワークフローの両方をカスタマイズできます。問題は、この手順でストアド プロシージャが追加されますが、EDMX にマップされないことです。

于 2011-07-08T10:08:15.537 に答える
1

Ladislavは、おそらく回避策を見つけたことを除けば正しいです。私はこれをテストしましたが、副作用があるかどうかはわかりませんが、機能します。

  1. Entity Designer Database Generation Power Packをダウンロードしてインストールします(もちろん、まだ持っていない場合)。
  2. 次の手順を実行して、データベースを最新バージョンのモデルに更新します(すでに次のことを知っている場合は、お詫びします。これは、知らない人向けです)
    。A.デザイナーを右クリックし、[モデルからデータベースを生成]を選択します
    。表示されるダイアログボックスで、左側から[移行SQLの生成と展開]オプションを選択します。(このオプションを選択した後は、必ず上部の[ワークフローの選択....]ボタンをクリックしてください)。
    C. [次へ]をクリックすると、それが機能することを確認できます。
  3. データベースにストアドプロシージャを作成します。
  4. からモデルを更新します

これで、モデルとデータベースが同期されます。秘訣は、将来、データベースまたはモデルのいずれかを最初に更新する場合は常に、手順2、3、および4を繰り返すだけです。

You now have the best of both worlds! One word though is I would make sure you have the latest version of the power pack (you have to uninstall the old version from windows control panel then redownload the latest version and install it. If you do not update and you have VS2010 SP1 then the power pack will not display the necessary dialog box when you choose Generate Database and you would lose your stored procedures more than likely.

Hope you like this. 3.

于 2011-08-19T01:28:55.317 に答える