Gewusst wie: Ausführen einer Abfrage, die StructuralType-Ergebnisse zurückgibt (EntityClient)
In diesem Thema wird dargestellt, wie ein Befehl für ein konzeptionelles Modell unter Verwendung eines EntityCommand-Objekts ausgeführt wird, und wie die StructuralType-Ergebnisse mithilfe von EntityDataReader abgerufen werden. Die Klassen EntityType, RowType und ComplexType sind von der StructuralType-Klasse abgeleitet.
So führen Sie den Code in diesem Beispiel aus
Fügen Sie dem Projekt das AdventureWorks Sales-Modell hinzu, und konfigurieren Sie das Projekt für die Verwendung von Entity Framework . Weitere Informationen finden Sie unter Gewusst wie: Verwenden des Entity Data Model-Assistenten (Entity Framework).
Fügen Sie der Codepage Ihrer Anwendung die folgenden using-Anweisungen (Imports in Visual Basic) hinzu:
Imports System 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
using System; using System.Collections.Generic; using System.Collections; using System.Data.Common; using System.Data; using System.IO; using System.Data.SqlClient; using System.Data.EntityClient; using System.Data.Metadata.Edm;
Beispiel
In diesem Beispiel wird eine Abfrage ausgeführt, die EntityType-Ergebnisse zurückgibt. Wenn Sie die folgende Abfrage als Argument an die ExecuteStructuralTypeQuery
-Funktion weiterleiten, zeigt die Funktion Einzelheiten zu Products an:
SELECT VALUE Product FROM AdventureWorksEntities.Products AS Product
Wenn Sie eine parametrisierte Abfrage wie die folgende übergeben, fügen Sie der Parameters-Eigenschaft die EntityParameter-Objekte auf dem EntityCommand-Objekt hinzu.
SELECT VALUE product FROM AdventureWorksEntities.Products
AS product where product.ListPrice >= @price
Private Shared Sub ExecuteStructuralTypeQuery(ByVal esqlQuery As String)
If esqlQuery.Length = 0 Then
Console.WriteLine("The query string is empty.")
Exit Sub
End If
Using conn As New EntityConnection("name=AdventureWorksEntities")
conn.Open()
' Create an EntityCommand.
Using cmd As EntityCommand = conn.CreateCommand()
cmd.CommandText = esqlQuery
' Execute the command.
Using rdr As EntityDataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)
' Start reading results.
While rdr.Read()
StructuralTypeVisitRecord(TryCast(rdr, IExtendedDataRecord))
End While
End Using
End Using
conn.Close()
End Using
End Sub
Private Shared Sub StructuralTypeVisitRecord(ByVal record As IExtendedDataRecord)
Dim fieldCount As Integer = record.DataRecordInfo.FieldMetadata.Count
For fieldIndex As Integer = 0 To fieldCount - 1
Console.Write(record.GetName(fieldIndex) & ": ")
' If the field is flagged as DbNull, the shape of the value is undetermined.
' An attempt to get such a value may trigger an exception.
If record.IsDBNull(fieldIndex) = False Then
Dim fieldTypeKind As BuiltInTypeKind = record.DataRecordInfo.FieldMetadata(fieldIndex).FieldType.TypeUsage.EdmType.BuiltInTypeKind
' The EntityType, ComplexType and RowType are structural types
' that have members.
' Read only the PrimitiveType members of this structural type.
If fieldTypeKind = BuiltInTypeKind.PrimitiveType Then
' Primitive types are surfaced as plain objects.
Console.WriteLine(record.GetValue(fieldIndex).ToString())
End If
End If
Next
End Sub
static void ExecuteStructuralTypeQuery(string esqlQuery)
{
if (esqlQuery.Length == 0)
{
Console.WriteLine("The query string is empty.");
return;
}
using (EntityConnection conn =
new EntityConnection("name=AdventureWorksEntities"))
{
conn.Open();
// Create an EntityCommand.
using (EntityCommand cmd = conn.CreateCommand())
{
cmd.CommandText = esqlQuery;
// Execute the command.
using (EntityDataReader rdr =
cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
// Start reading results.
while (rdr.Read())
{
StructuralTypeVisitRecord(rdr as IExtendedDataRecord);
}
}
}
conn.Close();
}
}
static void StructuralTypeVisitRecord(IExtendedDataRecord record)
{
int fieldCount = record.DataRecordInfo.FieldMetadata.Count;
for (int fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++)
{
Console.Write(record.GetName(fieldIndex) + ": ");
// If the field is flagged as DbNull, the shape of the value is undetermined.
// An attempt to get such a value may trigger an exception.
if (record.IsDBNull(fieldIndex) == false)
{
BuiltInTypeKind fieldTypeKind = record.DataRecordInfo.FieldMetadata[fieldIndex].
FieldType.TypeUsage.EdmType.BuiltInTypeKind;
// The EntityType, ComplexType and RowType are structural types
// that have members.
// Read only the PrimitiveType members of this structural type.
if (fieldTypeKind == BuiltInTypeKind.PrimitiveType)
{
// Primitive types are surfaced as plain objects.
Console.WriteLine(record.GetValue(fieldIndex).ToString());
}
}
}
}
Siehe auch
Konzepte
Entity SQL-Referenz
EntityClient-Anbieter für Entity Framework