다음을 통해 공유


방법: 저장 프로시저로 모델 정의(Entity Framework)

많은 응용 프로그램 개발자와 데이터베이스 관리자는 저장 프로시저를 사용하여 보안을 적용하고 예측 가능성을 제공하며 데이터베이스 내 데이터에 대한 논리를 캡슐화합니다. 이 항목의 예제에서는 저장 프로시저를 EDM(엔터티 데이터 모델) 구현에 매핑하는 데 필요한 스키마 구문의 기본 요소를 제공합니다. 그런 다음 데이터 모델을 사용하는 응용 프로그램에서 코드를 통해 저장 프로시저를 호출할 수 있습니다.

EDM은 두 가지 종류의 저장 프로시저 매핑을 지원합니다. 데이터를 업데이트하는 저장 프로시저 매핑에 대한 자세한 내용은 저장 프로시저 지원(Entity Framework)을 참조하십시오.

이 항목의 예제는 Adventure Works Sales 모델을 기반으로 합니다. 이 예제의 코드를 실행하려면 프로젝트에 AdventureWorks Sales 모델을 추가하고 Entity Framework를 사용하도록 프로젝트를 구성해야 합니다. 이렇게 하려면 방법: Entity Framework 프로젝트 수동 구성방법: 엔터티 데이터 모델 수동 정의(Entity Framework)의 절차를 수행합니다.

AdventureWorks Sales 모델에서는 다음 5가지 엔터티를 정의합니다.

  • Address

  • Contact

  • Product

  • SalesOrderDetail

  • SalesOrderHeader

다음 데이터베이스 스크립트와 스키마 추출 내용은 단일 SalesOrderHeader와 관련된 SalesOrderDetail 테이블의 데이터를 반환하는 저장 프로시저를 구현하는 데 사용됩니다. Sales 모델의 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)