방법: 저장 프로시저로 모델 정의(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(저장소 스키마 정의 언어) 요구 사항을 구현하려면
SSDL 파일을 엽니다.
스키마 태그 내부, 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(개념 스키마 정의 언어) 요구 사항을 구현하려면
CSDL 파일을 엽니다.
CSDL 세그먼트의 EntityContainer에 다음 FunctionImport를 추가합니다.
<FunctionImport Name="GetOrderDetails" EntitySet="SalesOrderDetail" ReturnType="Collection(AdventureWorksModel.SalesOrderDetail)"> <Parameter Name="SalesOrderHeaderId" Type="Int32" Mode="In"> </Parameter> </FunctionImport>
MSL(매핑 사양 언어) 요구 사항 구현
파일을 엽니다.
다음 EntityContainerMapping 구문을 추가합니다.
<FunctionImportMapping FunctionImportName="GetOrderDetails" FunctionName="AdventureWorksModel.Store.GetOrderDetails"/>
모델을 다시 빌드합니다.
참고 항목
작업
방법: 저장 프로시저를 사용하여 쿼리 실행(Entity Framework)
개념
저장 프로시저 지원(Entity Framework)
ModificationFunctionMapping(EntityTypeMapping)
ModificationFunctionMapping(AssociationSetMapping)