Compartir a través de


Cómo definir un modelo con un procedimiento almacenado (Entity Framework)

Muchos desarrolladores de aplicaciones y administradores de bases de datos utilizan procedimientos almacenados para exigir la seguridad, proporcionar previsibilidad y encapsular la lógica en datos dentro de la base de datos. El ejemplo de este tema proporciona los elementos básicos de la sintaxis del esquema que se necesitan para asignar un procedimiento almacenado a la implementación de Entity Data Model (EDM). El procedimiento almacenado puede ser invocado después por el código en una aplicación que use el modelo de datos.

El EDM admite dos tipos de asignación de procedimientos almacenados. Para obtener más información sobre cómo asignar procedimientos almacenados que actualizan datos, vea Compatibilidad con los procedimientos almacenados (Entity Framework).

Los ejemplos de este tema se basan en el modelo Adventure Works Sales. Para ejecutar el código de este ejemplo, debe haber agregado ya el modelo AdventureWorks Sales al proyecto y haber configurado el proyecto para usar Entity Framework. Para ello, complete los procedimientos de Cómo configurar manualmente un proyecto de Entity Framework y Cómo definir manualmente un modelo Entity Data Model (Entity Framework).

El modelo AdventureWorks Sales define cinco entidades:

  • Address

  • Contact

  • Product

  • SalesOrderDetail

  • SalesOrderHeader

Los extractos de esquemas y scripts de base de datos siguientes se utilizan para implementar un procedimiento almacenado que devuelve los datos que contienen las tablas SalesOrderDetail relacionadas con un único SalesOrderHeader. (La asociación FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID del modelo Sales puede hacer lo mismo que este ejemplo).

Para crear el procedimiento almacenado en la base de datos

  • Utilice SQL Server Management Studio o la sintaxis de comandos de consulta para ejecutar el comando de consulta siguiente, que implementa el procedimiento almacenado en la base de datos 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;
    

Para implementar los requisitos del lenguaje de definición de esquemas de almacenamiento (SSDL)

  1. Abra el archivo SSDL.

  2. Agregue la sintaxis de función siguiente dentro de las etiquetas del esquema pero fuera de las etiquetas EntityContainer.

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

Para implementar los requisitos del lenguaje de definición de esquemas conceptuales (CSDL)

  1. Abra el archivo CSDL.

  2. Agregue la FunctionImport siguiente al EntityContainer del segmento CSDL.

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

Implementar los requisitos del lenguaje de especificación de asignaciones (MSL)

  1. Abra el archivo.

  2. Agregue la sintaxis EntityContainerMapping siguiente.

    <FunctionImportMapping FunctionImportName="GetOrderDetails"
      FunctionName="AdventureWorksModel.Store.GetOrderDetails"/>
    
  3. Vuelva a generar el modelo.

Vea también

Tareas

Cómo ejecutar una consulta con un procedimiento almacenado (Entity Framework)

Conceptos

Compatibilidad con los procedimientos almacenados (Entity Framework)
ModificationFunctionMapping (EntityTypeMapping)
ModificationFunctionMapping (AssociationSetMapping)