変更関数をストアド プロシージャにマップする方法

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

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

エンティティ型の挿入、更新、および削除操作をストアド プロシージャにマップする場合は、次の操作を行う必要があります。

  • これら 3 つの操作をすべてストアド プロシージャにマップします。

  • 一貫してアソシエーションにマップします。ストアド プロシージャをいずれかの操作のアソシエーションにマップする場合は、他の 2 つの操作もそのアソシエーションにマップする必要があります。

  • 一対一のリレーションシップを持つ関連エンティティをストアド プロシージャにマップします。関連エンティティ間に一対多または多対多のリレーションシップがある場合は、関連エンティティをストアド プロシージャにマップする必要はありません。

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

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

  1. ソリューション エクスプローラで、<モデル名>.edmx ファイルをダブルクリックします。

    エンティティ デザイナでファイルが開きます。

  2. 挿入操作をマップするエンティティ型を右クリックします。

  3. [ストアド プロシージャ マッピング] をクリックします。

    [マッピングの詳細] ウィンドウに [エンティティ関数へのマップ] ペインが表示されます。

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

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

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

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

    [!メモ]

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

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

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

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

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

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

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

  11. 返された値とマップされていないプロパティのそれぞれについて手順 7. ~ 10. を繰り返します。

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

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

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

  1. ソリューション エクスプローラで、<モデル名>.edmx ファイルをダブルクリックします。

    エンティティ デザイナでファイルが開きます。

  2. 更新操作をマップするエンティティ型を右クリックします。

  3. [ストアド プロシージャ マッピング] をクリックします。

    [マッピングの詳細] ウィンドウに [エンティティ関数へのマップ] ペインが表示されます。

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

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

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

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

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

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

    [!メモ]

    更新操作をマップするときには、ストアド プロシージャから返されたデータをエンティティ プロパティにマップできます。次のいくつかの手順では、ストアド プロシージャから返される値をエンティティ プロパティにマップする方法について説明します。

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

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

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

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

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

  12. 必要に応じて、返された各値について手順 8. ~ 11. を繰り返します。

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

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

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

  1. ソリューション エクスプローラで、<モデル名>.edmx ファイルをダブルクリックします。

    エンティティ デザイナでファイルが開きます。

  2. 削除操作をマップするエンティティ型を右クリックします。

  3. [ストアド プロシージャ マッピング] をクリックします。

    [マッピングの詳細] ウィンドウに [エンティティ関数へのマップ] ペインが表示されます。

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

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

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

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

    [!メモ]

    ストアド プロシージャにアソシエーションをマップする必要があります。アソシエーションは、プロパティのドロップダウン リストから選択できます。

参照

処理手順

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

その他のリソース

ストアド プロシージャのサポート (Entity Framework)
マップされたストアド プロシージャのアプリケーション コード (Entity Framework)