次の方法で共有


ストアド プロシージャを使用してモデルを定義する方法 (Entity Framework)

データベースに定義されたストアド プロシージャを概念モデルで公開する方法は、2 つあります。

  • ストアド プロシージャにマップされる概念モデルの関数インポートを作成できます。 これにより、データベースのストアド プロシージャを実行する ObjectContext でメソッドを定義できます。 ストアド プロシージャの定義方法に応じて、対応する関数インポートはエンティティ型または複合型を返すことができます。

  • エンティティ型の挿入、更新、および削除操作をストアド プロシージャにマップできます。 これにより、エンティティ型の挿入、更新、および削除のカスタム動作を定義できます。

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

このトピックでは、データベースのストアド プロシージャにマップされる概念モデルの関数インポートを作成する方法について説明します。 エンティティ型の挿入、更新、および削除操作をストアド プロシージャにマップする方法の詳細については、「変更ストアド プロシージャを使用してモデルを定義する方法 (Entity Framework)」を参照してください。

ストアド プロシージャにマップされる関数インポートの作成には、ADO.NET Entity Data Model Toolsを使用することをお勧めします。 Entity Data Model ツールの使用の詳細については、以下のトピックを参照してください。

モデルとマッピング ファイルを手動で編集して、ストアド プロシージャにマップされる関数インポートを作成することもできます。 このトピックの例では、この方法について説明します。この例は、School サンプル データベースSchool モデルに基づいています。 School データベースからの School モデルの生成については、「EDM ジェネレーター (EdmGen.exe)」を参照してください。 既にストアド プロシージャをデータベースに定義している場合、ストアド プロシージャにマップされる関数インポートの基本的な作成手順は次のとおりです。

  1. データベースのストアド プロシージャを指定する Function 要素をストレージ モデルに追加します。

  2. 概念モデルの関数インポートを指定する FunctionImport 要素を概念モデルに追加します。

  3. 概念モデルの関数インポートをストレージ モデルの関数にマップする FunctionImportMapping 要素をマッピング ファイルに追加します。

このトピックの手順では、FunctionFunctionImport、および FunctionImportMapping の各要素を作成して、次のストアド プロシージャを概念モデルにインポートする方法について説明します。

IF NOT EXISTS (SELECT * FROM sys.objects 
            WHERE object_id = OBJECT_ID(N'[dbo].[GetStudentGrades]') 
            AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[GetStudentGrades]
            @StudentID int
            AS
            SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade
            WHERE StudentID = @StudentID
' 
END
GO

Function 要素をストレージ モデルに追加するには

  1. ストレージ モデル (.ssdl ファイル) を開きます。

  2. 次の Function 要素を Schema 要素の子として追加します。

    <Function Name="GetStudentGrades" Aggregate="false" BuiltIn="false" 
              NiladicFunction="false" IsComposable="false" 
              ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
      <Parameter Name="StudentID" Type="int" Mode="In" />
    </Function>
    

FunctionImport 要素を概念モデルに追加するには

  1. 概念モデル (.csdl ファイル) を開きます。

  2. 次の FunctionImport 要素を EntityContainer 要素の子として追加します。

    <FunctionImport Name="GetStudentGrades" EntitySet="StudentGrades" 
                    ReturnType="Collection(SchoolModel.StudentGrade)">
      <Parameter Name="StudentID" Mode="In" Type="Int32" />
    </FunctionImport>
    

FunctionImportMapping 要素をマッピング ファイルに追加するには

  1. マッピング ファイル (.msl ファイル) を開きます。

  2. 次の FunctionImportMapping 要素を EntityContainerMapping 要素の子として追加します。

    <FunctionImportMapping FunctionImportName="GetStudentGrades" 
                           FunctionName="SchoolModel.Store.GetStudentGrades" />
    

参照

その他のリソース

高度なデータ モデルの定義 (Entity Framework タスク)
How to: Define Custom Functions in the Storage Model
CSDL、SSDL、および MSL 仕様