Обзор 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.