Обзор ADO.NET Entity Framework - Использование EntityClient

ОГЛАВЛЕНИЕ

Использование EntityClient

Доступ к концептуальной модели Entity Framework может быть организован тремя способами (см. Рис. 1). Здесь я представлю EntityClient, новый поставщик данных .NET.
EntityClient абстрагирован от логического хранилища, поскольку он взаимодействует с концептуальной моделью посредством своего собственного текстового языка, называющегося Entity SQL. Все запросы Entity SQL, выполняемые через EntityClient, компилируются в деревья команд, посылаемые в хранилище. Преобразование запросов Entity SQL через концептуальную модель и далее в хранилище обеспечивается Entity Framework.

Классы EntityClient похожи на классы распространенных поставщиков ADO.NET. Например, запросы EntityClient выполняются в объекте EntityCommand, которому необходим объект EntityConnection для подключения к EDM. Хотя EntityClient взаимодействует с сущностями EDM, он не возвращает экземпляры сущностей, а вместо этого возвращает все результаты в виде объекта DbDataReader. При помощи DbDataReader EntityClient может возвращать стандартный набор строк и столбцов, либо представление более сложной иерархии данных.

На Рис. 8 показан пример использования EntityClient для подключения к концептуальной модели и получения списка заказчиков из Лондона. EntityConnection может воспринимать полную строку подключения к концептуальному слою или ее название в файле App.Config. Строка подключения содержит перечень файлов метаданных (файлов CSDL, MSL и SSDL), а также строку подключения к хранилищу, зависящую от конкретной базы данных. Здесь приведен пример полной строки подключения для Рис. 8:

Figure 8 Использование Entity SQL в EntityClient для доступа к EDM

string city = “London”;
using (EntityConnection cn = 
  new EntityConnection(“Name=NorthwindEntities”))
{
  cn.Open();
  EntityCommand cmd = cn.CreateCommand();
  cmd.CommandText = 
  “SELECT VALUE c FROM NorthwindEntities.Customers “ +
  “AS c WHERE c.City = @city”;
  cmd.Parameters.AddWithValue(“city”, city);
  DbDataReader rdr = cmd.ExecuteReader(
  CommandBehavior.SequentialAccess);
  while (rdr.Read())
  Console.WriteLine(rdr[“CompanyName”].ToString());
  rdr.Close();
}

“metadata=.\NorthwindEntities.csdl|.\NorthwindEntities.ssdl|.
\NorthwindEntities.msl;provider=System.Data.SqlClient;provider connection string=’Data Source=DDVPC01
\SQLEXPRESS;Initial Catalog=Northwind;
Integrated Security=True’”

Пример кода на Рис. 8 показывает, как создать объект EntityConnection и выполнить для него команду EntityCommand. Запрос, написанный на Entity SQL, обращается к набору EntitySet Customers в EDM. Отметьте, что синтаксис специально сделан аналогичным синтаксису T-SQL. (Если вам нужен хороший справочник по синтаксису Entity SQL, воспользуйтесь документацией MSDN® для первого бета-выпуска «Orcas».)

Как показано на Рис. 8, объекты EntityParameter также могут быть добавлены. В первом бета-выпуске EntityClient не поддерживает запросов DML; однако, ведется работа на поддержкой этого в будущем. Тем не менее, DML можно выполнить другим способом, таким как LINQ to Entities.