Så här kör du en polymorf fråga
Det här avsnittet visar hur du kör en polymorf entitets-SQL-fråga med hjälp av OFTYPE-operatorn .
Så här kör du koden i det här exemplet
Lägg till skolmodellen i projektet och konfigurera projektet så att det använder Entity Framework. Mer information finns i Så här använder du guiden Entitetsdatamodell.
På kodsidan för ditt program lägger du till följande
using
direktiv (Imports
i 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
Ändra den konceptuella modellen så att den har ett arv per tabell per hierarki genom att följa stegen i Genomgång: Mappa arv – Tabell per hierarki.
Exempel
I följande exempel används en OFTYPE-operator för att hämta och visa en samling endast OnsiteCourses
från en samling med 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