Entity Client

35

Низкоуровневый 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");
Пройди тесты
Лучший чат для C# программистов