Entity Client
35Работа с базами данных в .NET Framework --- ADO.NET --- Entity Client
Низкоуровневый API-интерфейс для доступа к Entity Framework находится в пространстве имен System.Data.SqlClient. Это пространство имен содержит поставщика ADO.NET, который обращается к базе данных, используя сущностную модель данных — Entity Data Model (EDM). Этот поставщик ADO.NET, определяет классы, унаследованные от базовых классов DbConnection, DbCommand, DbParameter и DbDataReader. Здесь классы называются EntityConnection, EntityCommand, EntityParameter и EntityDataReader.
Упомянутые классы можно использовать таким же образом, как описывалось ранее, за исключением того, что требуется специальная строка соединения, и для доступа к модели EDM Entity вместо T-SQL применяется SQL.
Подключение к базе данных осуществляется через класс EntityConnection, что требует специальной сущностной строки соединения. Эта строка читается из конфигурационного файла с помощью класса ConfigurationManager из пространства имен System.Configuration. Метод CreateCommand класса EntityConnection возвращает EntityCommand. Текст команды для EntityCommand присваивается свойству CommandText и требует команды Entity SQL.
Строка соединения необходима для EDM и отличается от нормальной строки соединения ADO.NET, потому что требуется информация об отображении. Отображение определено ключевым словом metadata. В отображении должны быть указаны три вещи: список с разделителями файлов отображения, Provider — для инвариантного имени поставщика для доступа к источнику данных, и Provider connection string для присваивания зависящей от поставщика строки соединения.
Список с разделителями файлов отображения включает файлы InventoryEDM.csdl, InventoryEDM.ssdl и InventoryEDM.msl, которые содержатся внутри ресурсов в сборке, как определено префиксом res:. Внутри Visual Studio визуальный конструктор использует только один файл — InventoryEDM.edmx, который содержит код CSDL, SSDL и MSL. Установка свойства Custom Tool (Специальный инструмент) в EntityModelCodeGenerator создает три файла, которые содержатся внутри ресурсов.
В настройке connectionString можно найти строку соединения с базой данных. Эта часть — такая же, как простая строка соединения ADO.NET, и зависит от поставщика, который устанавливается в настройке provider:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="AutoLotEntities" connectionString="metadata=res://*/InventoryEDM.csdl|res://*/InventoryEDM.ssdl|res://*/InventoryEDM.msl;
provider=System.Data.SqlClient;provider connection string="
Data Source=MICROSOF-1EA29E\SQLEXPRESS;Initial Catalog=AutoLot;
Integrated Security=True;Pooling=False;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
В строке соединения можно также указывать файлы, CSDL, SSDL и MSL, которые не включены в сборку в виде ресурсов. Это полезно, если необходимо изменить содержимое этих файлов после развертывания проекта.
Для запросов данных с помощью Entity Client используется Entity SQL. Язык Entity SQL расширяет T-SQL добавлением типов. Этот синтаксис не требует соединений, поскольку вместо них могут использоваться ассоциации сущностей.
В Entity SQL нет оператора SELECT *. Все столбцы извлекаются ранее запросом EntitySet. С помощью SELECT VALUE можно также получить все столбцы, как показано в следующем фрагменте. В нем также применяется фильтр с WHERE, который позволяет получить в запросе только определенных издателей. Обратите внимание, что в CommandText параметр указывается с символом однако при добавлении параметра в коллекцию Parameters символ @ не используется:
command.CommandText = "SELECT VALUE it FROM AutoLotEntities.AutoLot AS it WHERE " +
"it.Carname = @BMW";
command.Parameters.AddWithValue("Carname", "Audi");