Share via


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

Un procedimiento almacenado que se define en una base de datos se puede exponer en un modelo conceptual de dos maneras:

  • Puede crear una importación de función en el modelo conceptual que se asigne a un procedimiento almacenado. Esto permite definir un método en ObjectContext que ejecute el procedimiento almacenado en la base de datos. En función de cómo se haya definido el procedimiento almacenado, la importación de función correspondiente puede devolver tipos de entidad o tipos complejos.

  • Puede asignar operaciones de inserción, actualización y eliminación para un tipo de entidad a procedimientos almacenados. Esto permite definir comportamientos personalizados de inserción, actualización y eliminación para tipos de entidad.

    Bb896279.note(es-es,VS.100).gifNota:
    Si no asigna las tres operaciones de inserción, actualización y eliminación de un tipo de entidad a procedimientos almacenados, se producirá un error en las operaciones no asignadas si se ejecutan en tiempo de ejecución y se producirá una excepción UpdateException.

En este tema se describe cómo crear una importación de función en un modelo conceptual que se asigne a un procedimiento almacenado en la base de datos. Para obtener información sobre cómo asignar las operaciones de inserción, actualización y eliminación para los tipos de entidad a procedimiento almacenado, vea Cómo definir un modelo con procedimientos almacenados de modificación (Entity Framework).

La manera recomendada de crear una importación de función que se asigna a un procedimiento almacenado consiste en usar las ADO.NET Entity Data Model Tools. Para obtener información sobre cómo utilizar las herramientas de Entity Data Model, consulte los siguientes temas:

También puede modificar manualmente los archivos de modelo y de asignación para crear una importación de función que se asigne a un procedimiento almacenado. El ejemplo de este tema muestra cómo llevarlo a cabo y se basa en la base de datos de ejemplo School y el modelo School. Para obtener información sobre la generación del modo School a partir de la base de datos School, vea Generador de EDM (EdmGen.exe). Suponiendo que ha definido un procedimiento almacenado en la base de datos, los pasos básicos para crear una importación de función que se asigna al procedimiento almacenado son los siguientes:

  1. Agregue un elemento Function al modelo de almacenamiento que especifique el procedimiento almacenado en la base de datos.

  2. Agregue un elemento FunctionImport al modelo conceptual que especifique la importación de función en el modelo conceptual.

  3. Agregue un elemento FunctionImportMapping al archivo de asignación que asigne la importación de función del modelo conceptual a la función del modelo de almacenamiento.

Los procedimientos de este tema describen cómo crear los elementos Function, FunctionImport y FunctionImportMapping para importar el siguiente procedimiento almacenado en el modelo conceptual:

IF NOT EXISTS (SELECT * FROM sys.objects 
            WHERE object_id = OBJECT_ID(N'[dbo].[GetStudentGrades]') 
            AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[GetStudentGrades]
            @StudentID int
            AS
            SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade
            WHERE StudentID = @StudentID
' 
END
GO

Para agregar un elemento Function al modelo de almacenamiento

  1. Abra el modelo de almacenamiento (el archivo .ssdl).

  2. Agregue el siguiente elemento Function como un elemento secundario del elemento Schema:

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

Para agregar un elemento FunctionImport al modelo conceptual

  1. Abra el modelo conceptual (el archivo .csdl).

  2. Agregue el siguiente elemento FunctionImport como un elemento secundario del elemento EntityContainer.

    <FunctionImport Name="GetStudentGrades" EntitySet="StudentGrades" 
                    ReturnType="Collection(SchoolModel.StudentGrade)">
      <Parameter Name="StudentID" Mode="In" Type="Int32" />
    </FunctionImport>
    

Para agregar un elemento FunctionImportMapping al archivo de asignación

  1. Abra el archivo de asignación (el archivo .msl).

  2. Agregue el siguiente elemento FunctionImportMapping como un elemento secundario del elemento EntityContainerMapping.

    <FunctionImportMapping FunctionImportName="GetStudentGrades" 
                           FunctionName="SchoolModel.Store.GetStudentGrades" />
    

Vea también

Otros recursos

Definir modelos de datos avanzados (tareas de Entity Framework)
How to: Define Custom Functions in the Storage Model
Especificaciones CSDL, SSDL y MSL