次の方法で共有


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

多くのアプリケーション開発者とデータベース管理者は、ストアド プロシージャを使用して、セキュリティを設定し、予測可能性を定義し、データベース内のデータのロジックをカプセル化します。このトピックの例では、Entity Data Model (EDM) の実装にストアド プロシージャをマップするのに必要なスキーマ構文の基本要素を示します。このストアド プロシージャは、EDM を使用するアプリケーションでコードによって呼び出すことができます。

EDM では、2 種類のストアド プロシージャのマッピングがサポートされています。データを更新するストアド プロシージャのマッピングの詳細については、「ストアド プロシージャのサポート (Entity Framework)」を参照してください。

このトピックの例には、AdventureWorks Sales Model が使用されています。この例のコードを実行するには、あらかじめプロジェクトに AdventureWorks Sales Model を追加し、Entity Framework が使用されるようにプロジェクトを構成しておく必要があります。具体的な方法については、「Entity Framework プロジェクトを手動で構成する方法」および「Entity Data Model を手動で定義する方法 (Entity Framework)」の手順を参照してください。

AdventureWorks Sales Model では、次の 5 つのエンティティが定義されます。

  • Address

  • Contact

  • Product

  • SalesOrderDetail

  • SalesOrderHeader

次のデータベース スクリプトとスキーマは、単一の SalesOrderHeader に関連した SalesOrderDetail テーブル内のデータを返すストアド プロシージャの実装に使用されます (この Sales Model の FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID アソシエーションを使用しても、この例と同じ内容を実行できます)。

データベースにストアド プロシージャを作成するには

  • SQL Server Management Studio またはクエリ コマンド構文を使用して、AdventureWorks データベースでストアド プロシージャを実装する、次のクエリ コマンドを実行します。

    USE [AdventureWorks]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF OBJECT_ID ( 'dbo.GetOrderDetails', 'P' ) IS NOT NULL 
        DROP PROCEDURE dbo.GetOrderDetails;
    GO
    
    CREATE PROCEDURE [dbo].[GetOrderDetails] 
       @SalesOrderHeaderId int 
    AS
        SELECT SalesOrderID, SalesOrderDetailID, CarrierTrackingNumber,
         OrderQty, ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount,
         rowguid, ModifiedDate, LineTotal
       FROM Sales.SalesOrderDetail
    WHERE SalesOrderID = @SalesOrderHeaderId;
    

ストア スキーマ定義言語 (SSDL) の要件を実装するには

  1. SSDL ファイルを開きます。

  2. スキーマ タグの内側 (ただし EntityContainer タグの外) に次の関数の構文を追加します。

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

概念スキーマ定義言語 (CSDL) の要件を実装するには

  1. CSDL ファイルを開きます。

  2. CSDL セグメントの EntityContainer に次の FunctionImport を追加します。

    <FunctionImport Name="GetOrderDetails"
        EntitySet="SalesOrderDetail"
        ReturnType="Collection(AdventureWorksModel.SalesOrderDetail)">
      <Parameter Name="SalesOrderHeaderId" Type="Int32" Mode="In">
      </Parameter>
    </FunctionImport>
    

マッピング スキーマ言語 (MSL) の要件の実装

  1. ファイルを開きます。

  2. 次の EntityContainerMapping 構文を追加します。

    <FunctionImportMapping FunctionImportName="GetOrderDetails"
      FunctionName="AdventureWorksModel.Store.GetOrderDetails"/>
    
  3. モデルを再構築します。

参照

処理手順

ストアド プロシージャを使用してクエリを実行する方法 (Entity Framework)

概念

ストアド プロシージャのサポート (Entity Framework)
ModificationFunctionMapping (EntityTypeMapping)
ModificationFunctionMapping (AssociationSetMapping)