Procedura: eseguire una query polimorfica
In questo argomento viene illustrato come eseguire una query Entity SQL polimorfica usando l'operatore OFTYPE.
Per eseguire il codice in questo esempio
Aggiungere il modello School al progetto e configurare il progetto per l'uso di Entity Framework. Per altre informazioni, vedere Procedura: Usare la procedura guidata di Entity Data Model.
Nella tabella codici per l'applicazione aggiungere le direttive seguenti
using
(Imports
in Visual Basic):using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.EntityClient; using System.Data.Metadata.Edm;
Imports System.Collections.Generic Imports System.Collections Imports System.Data.Common Imports System.Data Imports System.IO Imports System.Data.SqlClient Imports System.Data.EntityClient Imports System.Data.Metadata.Edm
Modificare il modello concettuale in modo da avere un modello con ereditarietà tabella per gerarchia seguendo la procedura descritta in Procedura dettagliata: eseguire il mapping dell'ereditarietà tabella per gerarchia.
Esempio
Nell'esempio seguente viene usato un operatore OFTYPE per ottenere e visualizzare una raccolta di soli oggetti OnsiteCourses
da una raccolta di oggetti Courses
.
using (EntityConnection conn = new EntityConnection("name=SchoolEntities"))
{
conn.Open();
// Create a query that specifies to
// get a collection of only OnsiteCourses.
string esqlQuery = @"SELECT VAlUE onsiteCourse FROM
OFTYPE(SchoolEntities.Courses, SchoolModel.OnsiteCourse)
AS onsiteCourse";
using (EntityCommand cmd = new EntityCommand(esqlQuery, conn))
{
// Execute the command.
using (DbDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
// Start reading.
while (rdr.Read())
{
// Display OnsiteCourse's location.
Console.WriteLine("CourseID: {0} ", rdr["CourseID"]);
Console.WriteLine("Location: {0} ", rdr["Location"]);
}
}
}
}
Using conn As New EntityConnection("name=SchoolEntities")
conn.Open()
' Create a query that specifies to
' get a collection of only OnsiteCourses.
Dim esqlQuery As String = "SELECT VAlUE onsiteCourse FROM " & _
"OFTYPE(SchoolEntities.Courses, SchoolModel.OnsiteCourse) AS onsiteCourse"
Using cmd As New EntityCommand(esqlQuery, conn)
' Execute the command.
Using rdr As DbDataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)
' Start reading.
While rdr.Read()
' Display OnsiteCourse's location.
Console.WriteLine("CourseID: {0} ", rdr("CourseID"))
Console.WriteLine("Location: {0} ", rdr("Location"))
End While
End Using
End Using
End Using