Procédure : exécuter une requête qui retourne des résultats RefType (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 de RefType en utilisant un objet EntityDataReader.
Pour exécuter le code de cet exemple
Ajoutez le Modèle de vente AdventureWorks Sales Model à votre projet et configurez votre projet pour utiliser 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 RefType. Si vous passez la requête suivante en tant qu'argument à la fonction ExectueRefTypeQuery
, celle-ci retourne une référence à l'entité :
SELECT REF(p) FROM AdventureWorksEntities.Products as p
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 REF(p) FROM AdventureWorksEntities.Products as p WHERE p.ProductID == @productID
Private Shared Sub ExectueRefTypeQuery(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()
RefTypeVisitRecord(TryCast(rdr, IExtendedDataRecord))
End While
End Using
End Using
conn.Close()
End Using
End Sub
Private Shared Sub RefTypeVisitRecord(ByVal record As IExtendedDataRecord)
' For RefType the record contains exactly one field.
Dim fieldIndex As Integer = 0
' 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
'read only fields that contain PrimitiveType
If fieldTypeKind = BuiltInTypeKind.RefType Then
' Ref types are surfaced as EntityKey instances.
' The containing record sees them as atomic.
Dim key As EntityKey = TryCast(record.GetValue(fieldIndex), EntityKey)
' Get the EntitySet name.
Console.WriteLine("EntitySetName " & key.EntitySetName)
' Get the Name and the Value information of the EntityKey.
For Each keyMember As EntityKeyMember In key.EntityKeyValues
Console.WriteLine(" Key Name: " & keyMember.Key)
Console.WriteLine(" Key Value: " & keyMember.Value)
Next
End If
End If
End Sub
static public void ExectueRefTypeQuery(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())
{
RefTypeVisitRecord(rdr as IExtendedDataRecord);
}
}
}
conn.Close();
}
}
static void RefTypeVisitRecord(IExtendedDataRecord record)
{
// For RefType the record contains exactly one field.
int fieldIndex = 0;
// 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;
//read only fields that contain PrimitiveType
if (fieldTypeKind == BuiltInTypeKind.RefType)
{
// Ref types are surfaced as EntityKey instances.
// The containing record sees them as atomic.
EntityKey key = record.GetValue(fieldIndex) as EntityKey;
// Get the EntitySet name.
Console.WriteLine("EntitySetName " + key.EntitySetName);
// Get the Name and the Value information of the EntityKey.
foreach (EntityKeyMember keyMember in key.EntityKeyValues)
{
Console.WriteLine(" Key Name: " + keyMember.Key);
Console.WriteLine(" Key Value: " + keyMember.Value);
}
}
}
}
Voir aussi
Concepts
Référence Entity SQL
Fournisseur EntityClient pour Entity Framework