Procédure : exécuter une requête qui retourne des résultats StructuralType (EntityClient)
Cette rubrique montre comment exécuter une commande par rapport à un modèle conceptuel en utilisant un objet EntityCommand et comment récupérer les résultats StructuralType en utilisant un objet EntityDataReader. Les classes EntityType, RowType et ComplexType sont dérivées de la classe StructuralType.
Pour exécuter le code de cet exemple
Ajoutez le modèle de vente Modèle de vente AdventureWorks Sales Model à votre projet et configurez ce dernier pour qu'il utilise Entity Framework . Pour plus d'informations, consultez Procédure : utiliser l'Assistant Entity Data Model (Entity Framework).
Dans la page de codes de votre application, ajoutez les instructions using (Imports en Visual Basic) suivantes :
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;
Exemple
Cet exemple exécute une requête qui retourne des résultats EntityType. Si vous transmettez la requête suivante en tant qu'argument à la fonction ExecuteStructuralTypeQuery
, celle-ci affiche des détails sur l'objet Products :
SELECT VALUE Product FROM AdventureWorksEntities.Products AS Product
Si vous transmettez une requête paramétrable, telle que la suivante, ajoutez les objets EntityParameter à la propriété Parameters sur l'objet EntityCommand.
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());
}
}
}
}
Voir aussi
Concepts
Référence Entity SQL
Fournisseur EntityClient pour Entity Framework