Procedura: definire un modello con una stored procedure (Entity Framework)

Una stored procedure definita in un database può essere esposta in un modello concettuale in due modi:

  • È possibile creare un'importazione di una funzione nel modello concettuale che esegue il mapping a una stored procedure. Questo consente di definire un metodo nel proprio ObjectContext per eseguire la stored procedure nel database. A seconda di come è definita la stored procedure, l'importazione della funzione corrispondente può restituire tipi di entità o tipi complessi.

  • È possibile eseguire il mapping delle operazioni di inserimento, aggiornamento ed eliminazione per un tipo di entità alle stored procedure. Questo consente di definire comportamenti di inserimento, aggiornamento ed eliminazione personalizzati per i tipi di entità.

    Bb896279.note(it-it,VS.100).gifNota:
    Se non si esegue il mapping di tutte e tre le operazioni di inserimento, aggiornamento ed eliminazione di un tipo di entità alle stored procedure, le operazioni non mappate avranno esito negativo se eseguite durante il runtime e verrà generata un'eccezione UpdateException.

In questo argomento viene descritto come creare un'importazione di una funzione in un modello concettuale che esegue il mapping a una stored procedure nel database. Per informazioni sul mapping delle operazioni di inserimento, aggiornamento ed eliminazione per i tipi di entità alle stored procedure, vedere Procedura: definire un modello mediante stored procedure di modifica (Entity Framework).

Per creare un'importazione di una funzione che esegue il mapping a una stored procedure, è consigliabile utilizzare gli ADO.NET Entity Data Model Tools. Per informazioni sull'utilizzo degli strumenti di Entity Data Model, vedere gli argomenti seguenti:

È inoltre possibile modificare manualmente i file di modello e di mapping per creare un'importazione di una funzione che esegue il mapping a una stored procedure. Nell'esempio riportato in questo argomento viene illustrato come eseguire questa operazione utilizzando il database di esempio School e il modello School. Per informazioni sulla generazione del modello School dal database School, vedere Generatore EDM (EdmGen.exe). Supponendo che sia stata definita una stored procedure nel database, i passaggi di base per la creazione di un'importazione di una funzione che esegue il mapping alla stored procedure sono i seguenti:

  1. Aggiungere un elemento Function al modello di archiviazione che specifichi la stored procedure nel database.

  2. Aggiungere un elemento FunctionImport al modello concettuale che specifichi la funzione di importazione nel modello concettuale.

  3. Aggiungere un elemento FunctionImportMapping al file di mapping che esegua il mapping dell'importazione della funzione nel modello concettuale alla funzione nel modello di archiviazione.

Nelle procedure illustrate in questo argomento viene descritto come creare gli elementi Function, FunctionImport e FunctionImportMapping per importare la stored procedure seguente nel modello concettuale:

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

Per aggiungere un elemento Function al modello di archiviazione

  1. Aprire il modello di archiviazione (file con estensione ssdl).

  2. Aggiungere l'elemento Function seguente come elemento figlio dell'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>
    

Per aggiungere un elemento FunctionImport al modello concettuale

  1. Aprire il modello concettuale (file con estensione csdl).

  2. Aggiungere l'elemento FunctionImport seguente come elemento figlio dell'elemento EntityContainer.

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

Per aggiungere un elemento FunctionImportMapping al file di mapping

  1. Aprire il file di mapping (con estensione msl).

  2. Aggiungere l'elemento FunctionImportMapping seguente come elemento figlio dell'elemento EntityContainerMapping.

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

Vedere anche

Altre risorse

Definizione di modelli di dati avanzati (attività di Entity Framework)
How to: Define Custom Functions in the Storage Model
Specifiche CSDL, SSDL e MSL