Как определить модель с помощью хранимой процедуры (платформа Entity Framework)
Многие разработчики приложений и администраторы баз данных используют хранимые процедуры для обеспечения безопасности, предсказуемости и инкапсулирования логики работы с данными внутри базы данных. Пример в этом разделе содержит основные элементы синтаксиса схемы, необходимые, чтобы сопоставить хранимую процедуру с реализацией модели EDM. Затем хранимая процедура может быть вызвана в коде приложения, которое использует эту модель данных.
Модель EDM поддерживает два типа сопоставлений хранимых процедур. Дополнительные сведения о сопоставлении хранимых процедур, обновляющих данные, см. в разделе Поддержка хранимых процедур (платформа Entity Framework).
Примеры в этом разделе основаны на модели Adventure Works Sales. Чтобы запустить код данного примера, необходимо сначала добавить к проекту модель AdventureWorks Sales и настроить проект для использования платформы Entity Framework. Для этого выполните инструкции из разделов Как вручную настроить проект Entity Framework и Как определить модель EDM вручную (платформа Entity Framework).
В модели AdventureWorks Sales определены пять сущностей:
Address
Contact
Product
SalesOrderDetail
SalesOrderHeader
Следующие сценарии и фрагменты схем базы данных используются для реализации хранимой процедуры, которая возвращает данные, содержащиеся в таблицах SalesOrderDetail
, связанных с SalesOrderHeader
. (Ассоциация FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID
в модели продаж Sales Model может решить ту же задачу, что и этот пример.)
Создание хранимой процедуры в базе данных
Используйте среду 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-файл.
Добавьте следующий элемент FunctionImport к элементу EntityContainer сегмента языка CSDL.
<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)