Export (0) Print
Expand All

How to: Execute a Query that Returns StructuralType Results

This topic shows how to execute a command against a conceptual model by using an EntityCommand object, and how to retrieve the StructuralType results by using an EntityDataReader. The EntityType, RowType and ComplexType classes derive from the StructuralType class.

To run the code in this example

  1. Add the AdventureWorks Sales Model to your project and configure your project to use the Entity Framework. For more information, see How to: Use the Entity Data Model Wizard (Entity Framework).

  2. In the code page for your application, add the following using statements (Imports in Visual Basic):

    
    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
        
    

Example

This example executes a query that returns EntityType results. If you pass the following query as an argument to the ExecuteStructuralTypeQuery function, the function displays details about the Products:


SELECT VALUE Product FROM AdventureWorksEntities.Products AS Product
    

If you pass a parameterized query, like the following, add the EntityParameter objects to the Parameters property on the EntityCommand object.


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
    

See Also




Build Date:

2012-08-02
Show:
© 2014 Microsoft