HOW TO:定義具有預存程序的模型 (Entity Framework)

許多應用程式開發人員和資料庫管理員都會使用預存程序來強制實行安全性、提供可預測性,並將資料上的邏輯封裝在資料庫內。本主題的範例提供了結構描述語法的基本項目,將預存程序對應到 Entity Data Model (EDM) 實作時需要這些項目。然後此預存程序會由應用程式中使用資料模型的程式碼所呼叫。

EDM 支援兩種預存程序對應。如需更新資料之對應預存程序的詳細資訊,請參閱預存程序支援 (Entity Framework)

本主題的範例是根據 Adventure Works Sales Model。若要執行這個範例中的程式碼,您必須已經將 AdventureWorks Sales Model 加入至專案中,而且將專案設定成使用 Entity Framework。若要這樣做,請完成 HOW TO:手動設定 Entity Framework 專案HOW TO:以手動方式定義 Entity Data Model (Entity Framework) 中的程序。

AdventureWorks Sales Model 定義五個實體:

  • 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. 將下列 FunctionImport 加入到 CSDL 區段的 EntityContainer

    <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. 重建模型。

另請參閱

工作

HOW TO:使用預存程序執行查詢 (Entity Framework)

概念

預存程序支援 (Entity Framework)
ModificationFunctionMapping (EntityTypeMapping)
ModificationFunctionMapping (AssociationSetMapping)