方法: 変更関数をストアド プロシージャにマップする (Entity Data Model ツール)

このトピックでは、ADO.NET Entity Data Model デザイナー (エンティティ デザイナー) を使用してエンティティ型の挿入、更新、および削除の操作をストアド プロシージャにマップする方法について説明します。

Entity Framework は、概念モデルのエンティティ コンテナーを表す ObjectContext から派生したクラスを生成します (派生クラスの名前は概念モデル ファイルの EntityContainer の名前です)。このクラスは、基になるデータベースへの更新をトリガーする SaveChanges メソッドを公開します。 これらの更新では、システムによって自動的に生成される SQL ステートメントを使用することも (既定の方法)、特定のストアド プロシージャが使用されるように指定することもできます。 エンティティの作成、更新、および削除に使用されるアプリケーション コードは、データベースの更新にストアド プロシージャを使用するかどうかにかかわらず、同じです。

Cc716711.note(ja-jp,VS.100).gif注 :
エンティティ型の挿入、更新、および削除の 3 つの操作をすべてストアド プロシージャにマップしないと、マップされていない操作は実行時に失敗して UpdateException がスローされます。

以下の手順は、エンティティ デザイナーで .edmx ファイルが開いていることを前提としています。

ストアド プロシージャへの挿入操作のマッピング

ストアド プロシージャに挿入操作をマップするには

  1. エンティティ デザイナー画面または [モデル ブラウザー] ウィンドウで、挿入操作をマップするエンティティ型を右クリックし、[ストアド プロシージャ マッピング] をクリックします。

    [マッピングの詳細] ウィンドウに [エンティティを関数にマップ] ビューが表示されます。

  2. [<挿入関数の選択>] をクリックします。

  3. 挿入操作をマップするストアド プロシージャをドロップダウン リストから選択します。

    ストアド プロシージャのパラメーターとエンティティのプロパティとの既定のマッピングがウィンドウに表示されます。

  4. 必要に応じて、各ストアド プロシージャ パラメーターのマッピングを変更します。これを行うには、対応するプロパティ フィールドをクリックし、ドロップダウン リストから適切なプロパティを選択します。

    Cc716711.note(ja-jp,VS.100).gif注 :
    エンティティ キーにはマッピングが必要です。ストアド プロシージャで INSERT ステートメントを使用する場合、エンティティ キーは通常、新しい行の挿入時に作成された主キーにマップされます。次のいくつかの手順では、ストアド プロシージャから返されるデータをエンティティ プロパティにマップする方法について説明します。

  5. [<結果バインドの追加>] をクリックします。

    フィールドが編集可能になります。

  6. ストアド プロシージャから返されたデータを含むパラメーターの名前を入力します。

  7. パラメーター名に対応するプロパティ フィールドをクリックします。

    このフィールドは、プロパティを示すドロップダウン リストになります。

  8. 返されたデータをマップするプロパティを選択します。

    Cc716711.note(ja-jp,VS.100).gif注 :
    整数値の出力パラメーターの場合は、[処理行数パラメーター] チェックボックスが有効になります。パラメーターのこのチェックボックスをオンにすると、挿入操作が呼び出されたときに戻り値がゼロの場合は、OptimisticConcurrencyException がスローされます。

  9. 戻り値とマップされていないプロパティのそれぞれについて手順 5. ~ 8. を繰り返します。

以上で、選択したエンティティ型の挿入操作がストアド プロシージャにマップされました。

ストアド プロシージャへの更新操作のマッピング

ストアド プロシージャに更新操作をマップするには

  1. エンティティ デザイナー画面または [モデル ブラウザー] ウィンドウで、更新操作をマップするエンティティ型を右クリックし、[ストアド プロシージャ マッピング] をクリックします。

    [マッピングの詳細] ウィンドウに [エンティティを関数にマップ] ビューが表示されます。

  2. [<更新関数の選択>] をクリックします。

  3. 更新操作をマップするストアド プロシージャをドロップダウン リストから選択します。

    ストアド プロシージャのパラメーターとエンティティのプロパティとの既定のマッピングがウィンドウに表示されます。

  4. 必要に応じて、各ストアド プロシージャ パラメーターのマッピングを変更します。これを行うには、対応するプロパティ フィールドをクリックし、ドロップダウン リストから適切なプロパティを選択します。

  5. 必要に応じて、各プロパティの [元の値を使用する] 列のチェック ボックスをオンにすることができます。

    [元の値を使用する] オプションをオンにすると、同時実行制御を使用できるようになります。 プロパティの [元の値を使用する] オプションがオンになっている場合、データベースから読み取られたプロパティの値が、指定されたストアド プロシージャ パラメーターに渡されます。 プロパティの元の値と現在の値の両方を異なるパラメーターに渡すことができる点に注意してください。

    Cc716711.note(ja-jp,VS.100).gif注 :
    更新操作をマップするときには、ストアド プロシージャから返されたデータをエンティティ プロパティにマップできます。次のいくつかの手順では、ストアド プロシージャから返される値をエンティティ プロパティにマップする方法について説明します。

  6. [<結果バインドの追加>] をクリックします。

    フィールドが編集可能になります。

  7. ストアド プロシージャから返されたデータを含むパラメーターの名前を入力します。

  8. パラメーター名に対応するプロパティ フィールドをクリックします。

  9. 返されたデータをマップするプロパティをドロップダウン リストから選択します。

    Cc716711.note(ja-jp,VS.100).gif注 :
    整数値の出力パラメーターの場合は、[処理行数パラメーター] チェックボックスが有効になります。パラメーターのこのチェックボックスをオンにすると、更新操作が呼び出されたときに戻り値がゼロの場合は、OptimisticConcurrencyException がスローされます。

  10. 必要に応じて、各戻り値について手順 6. ~ 9. を繰り返します。

以上で、選択したエンティティ型の更新操作がストアド プロシージャにマップされました。

ストアド プロシージャへの削除操作のマッピング

ストアド プロシージャに削除操作をマップするには

  1. エンティティ デザイナー画面または [モデル ブラウザー] ウィンドウで、削除操作をマップするエンティティ型を右クリックし、[ストアド プロシージャ マッピング] をクリックします。

    [マッピングの詳細] ウィンドウに [エンティティを関数にマップ] ビューが表示されます。

  2. [<削除関数の選択>] をクリックします。

  3. 削除操作をマップするストアド プロシージャをドロップダウン リストから選択します。

    ストアド プロシージャのパラメーターとエンティティのプロパティとの既定のマッピングがウィンドウに表示されます。

  4. 必要に応じて、各ストアド プロシージャ パラメーターのマッピングを変更します。これを行うには、対応するプロパティ フィールドをクリックし、ドロップダウン リストから適切なプロパティを選択します。

    Cc716711.note(ja-jp,VS.100).gif注 :
    ストアド プロシージャにアソシエーションをマップする必要があります。アソシエーションは、プロパティのドロップダウン リストから選択できます。

Cc716711.note(ja-jp,VS.100).gif注 :
整数値の出力パラメーターの場合は、[処理行数パラメーター] チェックボックスが有効になります。パラメーターのこのチェックボックスをオンにすると、削除操作が呼び出されたときに戻り値がゼロの場合は、OptimisticConcurrencyException がスローされます。

参照

処理手順

チュートリアル: ストアド プロシージャへのエンティティのマッピング (Entity Data Model ツール)