Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questo argomento viene illustrato come utilizzare una stored procedure per recuperare un insieme di tipi di entità. Nella procedura dettagliata si utilizzerà ADO.NET Entity Data Model Designer (Entity Designer) per importare una stored procedure e creare un oggetto Function Import che restituisce un insieme di tipi di entità.
Includendo una stored procedure nel modello EDM (Entity Data Model), è possibile chiamare la stored procedure dal codice dell'applicazione. Quando una stored procedure viene aggiunta al modello concettuale è definita Function Import. Una Function Import può restituire insiemi di tipi semplici o di tipi di entità o nessun valore.
Nota |
|---|
Affinché una Function Import restituisca un EntityType, le colonne restituite dalla stored procedure corrispondente devono corrispondere esattamente alle proprietà dell'oggetto EntityType restituito. |
Quando si genera un modello EDM da un database tramite la procedura guidata Entity Data Model, vengono create voci nel modello di archiviazione per ogni stored procedure contenuta nel database. Le voci corrispondenti vengono aggiunte al modello concettuale al momento della creazione di una Function Import. Per ulteriori informazioni sulla creazione di una Function Import, vedere Procedura: importare una stored procedure.
Prerequisiti
Per completare questa procedura dettagliata, è necessario compilare l'applicazione CourseManager. Per ulteriori informazioni e istruzioni, vedere la Guida rapida di Entity Framework. Dopo avere compilato l'applicazione, ne verrà modificato il modello EDM mediante la creazione di una Function Import basata sulla stored procedure GetStudentGrades.
Nota |
|---|
Poiché in molte procedure dettagliate di questa documentazione viene utilizzata l'applicazione CourseManager come punto di partenza, è consigliabile utilizzare una copia di tale applicazione anziché modificare il codice di CourseManager originale. |
In questa procedura dettagliata si presuppone che il lettore disponga di una competenza di base di Visual Studio, .NET Framework e della programmazione in Visual C# o Visual Basic.
Creazione di un oggetto Function Import
In questa procedura si creerà un oggetto Function Import basato sulla stored procedure GetStudentGrades inclusa nel modello di archiviazione dell'EDM di CourseManager.
Per creare un oggetto Function Import
Aprire la soluzione CourseManager in Visual Studio.
In Esplora soluzioni fare doppio clic sul file School.edmx.
Il file School.edmx verrà aperto in ADO.NET Entity Data Model Designer (Entity Designer) e verrà visualizzata la finestra Browser modello.
Espandere il nodo EntityContainer: SchoolEntities nella finestra Browser modello.
Le cartelle Set di entità, Set di associazioni e Importazioni di funzioni sono visibili nella visualizzazione albero.
Fare clic con il pulsante destro del mouse su Importazioni di funzioni e selezionare Crea importazione funzione.
Verrà aperta la finestra di dialogo New Function Import.
Selezionare GetStudentGrades nell'elenco Nome stored procedure.
Digitare GetStudentGrades nella casella di testo Nome Function Import.
Selezionare CourseGrade nell'elenco a discesa Tipo restituito.
NotaÈ possibile impostare il tipo restituito su CourseGrade perché le colonne restituite dalla stored procedure GetStudentGrades (EnrollementID e Grade) corrispondono in modo esatto alle proprietà scalari del tipo di entità CourseGrade.
Fare clic su OK.
Verrà eseguita l'aggiunta di Function Import di GetStudentGrades al modello EDM.
Costruzione dell'interfaccia utente
In questa procedura verranno aggiunti elementi all'interfaccia utente dell'applicazione CourseManager in modo da poter visualizzare i voti di uno studente selezionato.
Per costruire l'interfaccia utente
Fare clic con il pulsante destro del mouse sul progetto CourseManager in Esplora soluzioni, scegliere Aggiungi, quindi selezionare Nuovo elemento.
Verrà visualizzata la finestra di dialogo Aggiungi nuovo elemento.
Selezionare Windows Form, impostare il nome del form su GradeViewer.vb o su GradeViewer.cs, quindi fare clic su Aggiungi.
Un nuovo form verrà aggiunto al progetto e aperto nella finestra di progettazione dei form. Il nome del form viene impostato su GradeViewer, mentre il testo viene impostato su GradeViewer.
Trascinare un controllo ComboBox dalla casella degli strumenti nel form e impostarne il Nome su studentList nella finestra Proprietà.
Trascinare un controllo DataGridView dalla casella degli strumenti nel form e impostarne il Nome su gradeGridView nella finestra Proprietà.
Fare doppio clic sul file CourseViewer.vb o CourseViewer.cs in Esplora soluzioni.
Il file verrà aperto nella finestra di progettazione dei form.
Trascinare un controllo Button nel form. Impostarne il Nome su viewGrades e il Testo su ViewGrades.
Fare doppio clic sul controllo viewGradesButton.
Il gestore eventi viewGrades_Click viene aggiunto al file code-behind.
Aggiungere il codice seguente al gestore eventi viewGrades_Click:
Dim gradeViewer As New GradeViewer() gradeViewer.Visible = TrueGradeViewer gradeViewer = new GradeViewer(); gradeViewer.Visible = true;
L'interfaccia utente è ora completa.
Recupero di tipi di entità con una stored procedure
In questa procedura si aggiungerà codice per l'esecuzione dell'oggetto Function Import creato in precedenza dalla stored procedure GetStudentGrades. Il codice assocerà quindi l'insieme restituito EntityType a un controllo DataGridView. Per ulteriori informazioni sull'associazione di oggetti ai controlli, vedere Associazione di oggetti ai controlli (Entity Framework).
Per recuperare i tipi di entità con una stored procedure
Fare doppio clic sul corpo del form GradeViewer dopo averlo aperto nella finestra di progettazione dei form.
Verrà visualizzato il file code-behind per il form GradeViewer.
Aggiungere le istruzioni using (C#) o Imports (Visual Basic) seguenti:
Imports System.Data.Objects Imports System.Data.Objects.DataClassesusing System.Data.Objects; using System.Data.Objects.DataClasses;Aggiungere una proprietà alla classe GradeViewer che rappresenta il contesto dell'oggetto:
' Create an ObjectContext instance based on SchoolEntity. Private schoolContext As SchoolEntities// Create an ObjectContext instance based on SchoolEntity. private SchoolEntities schoolContext;Nel gestore eventi GradeViewer_Load aggiungere il codice che segue. Tale codice inizializza il contesto dell'oggetto e imposta l'origine dati per il controllo ComboBox su una query che restituisce tutti i tipi Person con EnrollmentDate diverso da null.
' Initialize schoolContext. schoolContext = New SchoolEntities() ' Define the query to retrieve students. Dim studentQuery As ObjectQuery(Of Person) = schoolContext _ .Person.Where("it.EnrollmentDate is not null") _ .OrderBy("it.LastName") ' Execute and bind the studentList control to the query. studentList.DataSource = studentQuery _ .Execute(MergeOption.OverwriteChanges) studentList.DisplayMember = "LastName"schoolContext = new SchoolEntities(); // Define the query to retrieve students. ObjectQuery<Person> studentQuery = schoolContext.Person .Where("it.EnrollmentDate is not null") .OrderBy("it.LastName"); // Execute and bind the studentList control to the query. studentList.DataSource = studentQuery .Execute(MergeOption.OverwriteChanges); studentList.DisplayMember = "LastName";Tornare alla visualizzazione Progettazione del form GradeViewer e fare doppio clic sul controllo studentListComboBox.
Il gestore eventi studentList_SelectedIndexChanged viene aggiunto al file code-behind.
Aggiungere il codice che segue al gestore eventi studentList_SelectedIndexChanged. Questo codice esegue GetStudentGradesFunctionImport e associa i risultati al controllo DataGridView quando si seleziona un nuovo studente nell'elenco a discesa.
' Get the selected student so we can use the ' PersonID in the function import call. Dim currentStudent As Person = CType(Me.studentList _ .SelectedItem(), Person) ' Set the data source for the gradeGridView ' to the results returned by the GetStudentGrades ' Function Import. gradeGridView.DataSource = schoolContext _ .GetStudentGrades(currentStudent.PersonID)// Get the selected student so we can use the // PersonID in the function import call. Person currentStudent = (Person)this.studentList .SelectedItem; // Set the data source for the gradeGridView // to the results returned by the GetStudentGrades // Function Import. gradeGridView.DataSource = schoolContext .GetStudentGrades(currentStudent.PersonID);
Premere CTRL+F5 per eseguire l'applicazione. È ora possibile visualizzare le informazioni sui voti dello studente facendo clic su View Grades e selezionando un studente nell'elenco a discesa nel form Grade Viewer
Listato di codice
In questa sezione è contenuta la versione finale del file code-behind del form GradeViewer.
Imports System.Data.Objects
Imports System.Data.Objects.DataClasses
Public Class GradeViewer
' Create an ObjectContext instance based on SchoolEntity.
Private schoolContext As SchoolEntities
Private Sub GradeViewer_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
' Initialize schoolContext.
schoolContext = New SchoolEntities()
' Define the query to retrieve students.
Dim studentQuery As ObjectQuery(Of Person) = schoolContext _
.Person.Where("it.EnrollmentDate is not null") _
.OrderBy("it.LastName")
' Execute and bind the studentList control to the query.
studentList.DataSource = studentQuery _
.Execute(MergeOption.OverwriteChanges)
studentList.DisplayMember = "LastName"
End Sub
Private Sub studentList_SelectedIndexChanged(ByVal sender As _
System.Object, ByVal e As System.EventArgs) Handles _
studentList.SelectedIndexChanged
' Get the selected student so we can use the
' PersonID in the function import call.
Dim currentStudent As Person = CType(Me.studentList _
.SelectedItem(), Person)
' Set the data source for the gradeGridView
' to the results returned by the GetStudentGrades
' Function Import.
gradeGridView.DataSource = schoolContext _
.GetStudentGrades(currentStudent.PersonID)
End Sub
End Class
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Objects;
using System.Data.Objects.DataClasses;
namespace CourseManager
{
public partial class GradeViewer : Form
{
// Create an ObjectContext instance based on SchoolEntity.
private SchoolEntities schoolContext;
public GradeViewer()
{
InitializeComponent();
}
private void GradeViewer_Load(object sender, EventArgs e)
{
schoolContext = new SchoolEntities();
// Define the query to retrieve students.
ObjectQuery<Person> studentQuery = schoolContext.Person
.Where("it.EnrollmentDate is not null")
.OrderBy("it.LastName");
// Execute and bind the studentList control to the query.
studentList.DataSource = studentQuery
.Execute(MergeOption.OverwriteChanges);
studentList.DisplayMember = "LastName";
}
private void studentList_SelectedIndexChanged(object sender, EventArgs e)
{
// Get the selected student so we can use the
// PersonID in the function import call.
Person currentStudent = (Person)this.studentList
.SelectedItem;
// Set the data source for the gradeGridView
// to the results returned by the GetStudentGrades
// Function Import.
gradeGridView.DataSource = schoolContext
.GetStudentGrades(currentStudent.PersonID);
}
}
}
Passaggi successivi
È stato creato un oggetto Function Import che recupera un insieme di tipi di entità. Per ulteriori informazioni sul supporto per le stored procedure in Entity Framework, vedere Supporto delle stored procedure (Entity Framework). Per ulteriori informazioni sulla compilazione delle applicazioni che utilizzano Entity Framework, vedere Guida per programmatori (Entity Framework).
Vedere anche
Altre risorse
Scenari di ADO.NET Entity Data Model Designer
Attività degli strumenti di Entity Data Model