Как переходить по связям с помощью оператора Navigate (EntityClient)
В этом разделе представлен пример того, как выполнить команду применительно к модели EDM с помощью EntityCommand и как получить результаты RefType с помощью EntityDataReader.
Выполнение кода в этом примере
Добавьте модель AdventureWorks Sales к проекту и настройте проект для использования платформы Entity Framework. Для этого выполните одно из следующих действий.
Если установлены средства модели EDM, выполните процедуру из раздела Как использовать мастер моделей EDM (платформа Entity Framework).
В противном случае выполните процедуры, описанные в разделах Как вручную настроить проект Entity Framework и Как определить модель EDM вручную (платформа Entity Framework).
На странице кода приложения добавьте следующие инструкции using (Imports в Visual Basic):
Imports System Imports System.Collections.Generic Imports System.Collections Imports System.Data.Common Imports System.Data Imports System.Data.SqlClient Imports System.Data.EntityClient Imports System.Data.Metadata.Edm Imports System.IO ' Add AdventureWorksModel prepended with the root namespace for the project. 'Imports ProjectName.AdventureWorksModel
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 AdventureWorksModel; using System.Data.Metadata.Edm;
Примеры
В следующем примере демонстрируется переход по связям в Entity SQL с помощью оператора NAVIGATE (язык Entity SQL). Оператор Navigate принимает следующие параметры: экземпляр сущности, тип связи, конечный элемент связи и начальный элемент связи. Упрощенная версия оператора Navigate принимает экземпляр сущности и тип связи. В следующем примере показывается использование упрощенной версии оператора Navigate.
Using connection As EntityConnection = New EntityConnection("name=AdventureWorksEntities")
connection.Open()
Try
' Create an EntityCommand and pass the connection object
' and Entity SQL query to its constructor.
Using cmd As EntityCommand = connection.CreateCommand()
' Create an Entity SQL query.
Dim esqlQuery As String = "SELECT address.AddressID, (SELECT VALUE DEREF(soh) FROM " & _
"NAVIGATE(address, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) " & _
"AS soh) FROM AdventureWorksEntities.Address AS address"
cmd.CommandText = esqlQuery
' Execute the command.
Using reader As DbDataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)
' Start reading.
Do While reader.Read
Console.WriteLine(reader.Item("AddressID"))
Loop
End Using
End Using
Catch ex As EntityException
Console.WriteLine(ex.ToString())
End Try
connection.Close()
End Using
using (EntityConnection conn =
new EntityConnection("name=AdventureWorksEntities"))
{
conn.Open();
try
{
// Create an EntityCommand.
using (EntityCommand cmd = conn.CreateCommand())
{
// Create an Entity SQL query.
string esqlQuery =
@"SELECT address.AddressID, (SELECT VALUE DEREF(soh) FROM
NAVIGATE(address, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID)
AS soh) FROM AdventureWorksEntities.Address AS address";
cmd.CommandText = esqlQuery;
// Execute the command.
using (DbDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
// Start reading.
while (rdr.Read())
{
Console.WriteLine(rdr["AddressID"]);
}
}
}
}
catch (EntityException ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
}
См. также
Основные понятия
Другие ресурсы
Работа с EntityClient (задачи платформы Entity Framework)
How to: Execute an Entity SQL Query Using EntityCommand