Платформа Entity Framework (SQL Server Compact)

Платформа Entity Framework представляет собой набор технологий ADO.NET для поддержки разработки приложений, связанных с обработкой данных. Платформа Entity Framework позволяет работать с данными в форме специфических для домена объектов и свойств (например, с клиентами и их адресами) без необходимости учитывать формат базовых таблиц и столбцов базы данных, где хранятся эти данные.

Платформа Entity Framework позволяет работать с данными на более высоком уровне абстракции, поддерживая программный код, независимый от конкретной подсистемы хранилища данных или реляционной схемы. Разработчики могут создавать приложения для доступа к данным на основе концептуальной модели приложения, а не непосредственно на основе схемы реляционного хранилища.

Приложения и службы платформы Entity Framework состоят из концептуальной модели, модели хранения и сопоставления между ними. Для нужд разработчиков, желающих создать модель Entity Data Model (EDM) на основе существующей базы данных, платформа Entity Framework предоставляет набор средств для создания и проверки модели EDM, а также для создания программируемых классов на основе концептуальной модели.

Технология ADO.NET с помощью модели EDM предоставляет сущности в виде объектов среды .NET. Это делает уровень объектов идеальной целью для поддержки LINQ. Технология LINQ to Entities позволяет разработчикам создавать гибкие, строго типизированные запросы к контексту объекта платформы Entity Framework с помощью выражений LINQ и стандартных операторов запросов LINQ непосредственно из среды разработки. Дополнительные сведения о платформе Entity Framework и технологии LINQ to Entities см. в документации по платформе Entity Framework.

SQL Server Compact версии 3.5 с пакетом обновления 1 (SP1) предоставляет поддержку Entity Framework на платформе Windows Desktop.

Платформа Entity Framework в SQL Server Compact

Для использования платформы Entity Framework в SQL Server Compact нужно сначала установить платформу Entity Framework. Entity Framework является компонентом платформы .NET Framework, начиная с .NET Framework 3.5 с пакетом обновления 1 (SP1).

Поддержка разработки для SQL Server Compact обеспечивается средой Visual Studio. Поддержка конструктора моделей EDM для платформы Entity Framework в среде Visual Studio обеспечивается с помощью средств платформы Entity Framework. Обратите внимание, что конструктор моделей EDM (конструктор сущностей) является компонентом среды Visual Studio, начиная с версии Visual Studio 2008 с пакетом обновления 1 (SP1). Это визуальное средство разработки, которое используется для создания и изменения модели EDM. Дополнительные сведения об этом средстве см. в документации по платформе Entity Framework.

Если нужно использовать Visual Studio 2008 вместо Visual Studio 2008 SP1, установите Microsoft SQL Server Compact 3.5 с пакетом обновления 1 (SP1), бета-версия, для платформы Entity Framework бета-версии 3, позволяющий интегрировать конструктор сущностей в SQL Server Compact. Дополнительные сведения по установке бета-версии см. в Центре загрузки Майкрософт.

Начиная с версии SQL Server Compact 3.5 с пакетом обновления 1 (SP1), SQL Server Compact предоставляет управляемую сборку: System.Data.SQLServerCe.Entity.dll. Сборка System.Data.SQLServerCe.Entity.dll используется управляемым поставщиком данных ADO.NET System.Data.SqlServerCE.dll внутренним образом и поддерживает доступ к данным, описанным в модели EDM.

При установке версии SQL Server Compact 3.5 с пакетом обновления 1 (SP1) (SSCERuntime-RUS.msi) сборка System.Data.SQLServerCe.Entity.dll устанавливается в папку «%ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5».

Ограничения SQL Server Compact

Ниже перечислены некоторые ограничения SQL Server Compact при использовании с платформой Entity Framework.

  • SQL Server Compact при использовании с платформой Entity Framework не поддерживает сущности с ключами или значениями, создаваемыми сервером.
    При использовании платформы Entity Framework ключи сущности могут быть помечены как создаваемые сервером. Это позволяет базе данных создавать значение для ключа при вставке или создании сущности. Кроме того, отдельные свойства сущности могут быть помечены как создаваемые сервером значения. Дополнительные сведения см. в разделе Шаблон, создаваемый хранилищем документации по платформе Entity Framework.
    Несмотря на то, что платформа Entity Framework позволяет определять типы сущностей с ключами или значениями, создаваемыми сервером, SQL Server Compact при использовании с платформой Entity Framework не поддерживает такие сущности. При попытке работы с сущностью, содержащей значения, создаваемые сервером, будет создано исключение «Не поддерживается».

  • SQL Server Compact при использовании с платформой Entity Framework не поддерживает выражения SKIP в запросах с разбиением на страницы. С другой стороны, SQL Server Compact в запросах с разбиением на страницы поддерживает выражения LIMIT и TOP.
    Запросы с разбиением на страницы поддерживают постраничный просмотр (с прокруткой или окнами) без сохранения состояния.
    В следующем примере показано, как написать запрос с разбиением на страницы на платформе Entity Framework с использованием операторов LINQ Skip и Take. Обратите внимание, что SQL Server Compact не поддерживает выражение SKIP в запросе с разбиением на страницы:

    LINQ:

    customers.OrderBy(c => c.Name).Skip(10).Take(20) 
    

    В следующем примере демонстрируется написание запроса с разбиением на страницы на платформе Entity Framework с использованием операторов SKIP, LIMIT и TOP языка Entity SQL. Обратите внимание, что SQL Server Compact не поддерживает выражение SKIP в запросе с разбиением на страницы:

    Entity SQL:

    SELECT value c 
    FROM NW.Customers AS c 
    ORDER BY c.Name skip 10 limit 20; 
    
  • SQL Server Compact не поддерживает полные внешние соединения, использующие платформу Entity Framework, хотя язык Entity SQL поддерживает полные внешние соединения. Например, следующий запрос не поддерживается:

    Entity SQL:

    SELECT c.Name, c.Id, o.Id 
    FROM NW.Customers AS c 
    FULL OUTER JOIN NW.Orders AS o ON c.Id = o.CustomerId
    

    Обратите внимание, что SQL Server Compact поддерживает внутренние соединения, левые и правые внешние соединения, использующие платформу Entity Framework.

  • SQL Server Compact не поддерживает вложенные предложения COLLATE в предложении ORDER BY запроса Entity SQL.
    Язык Entity SQL допускает указание вложенного предложения COLLATE как части каждого ключа в предложении ORDER BY. Вложенное предложение COLLATE применимо только к выражениям, значениями которых являются строки, и определяет семантику сравнения для использования в этом выражении.

    SQL Server Compact при использовании с платформой Entity Framework не поддерживает использование вложенного предложения COLLATE в предложении ORDER BY запроса Entity SQL. Например, следующий запрос не поддерживается:

    Entity SQL:

    SELECT value c 
    FROM NW.Customers AS c 
    ORDER BY c.Name COLLATE Traditional_Spanish_ci_ai 
    
  • В отличие от SQL Server, SQL Server Compact не поддерживает операции остатка от деления (обозначаемые знаком %) для типов данных real, float, money и numeric.
    Например, следующий запрос в SQL Server Compact возвращает ошибку:

    Entity SQL:

    ( CAST ( 1 AS Edm.Int16) % CAST ( 1 AS Edm.Decimal) ) 
    

    Transact-SQL:

    SELECT cast (1 as smallint) %cast (1 as decimal(28,4)) 
    

    При выполнении такого запроса будет выведено следующее сообщение об ошибке: «Операция остатка от деления не поддерживается для данных с плавающей запятой, действительного, денежного и числового типов данных. [Тип данных = числовой]».

  • SQL Server Compact не поддерживает использование ключевого слова DISTINCT в статистических выражениях (max, min, sum, count).
    При написании запросов на языках Entity SQL и Transact-SQL с использованием ключевого слова DISTINCT в статистических выражениях (max, min, sum, count) будет создано исключение «Не поддерживается». В следующем примере показан запрос Entity SQL с использованием ключевого слова DISTINCT в статистическом выражении count.

    Entity SQL:

    SELECT count(distinct [TaskId]) FROM ArubaContainer.TaskSet AS [Task]
    
  • SQL Server Compact при использовании с платформой Entity Framework не поддерживает время ожидания команд.
    Платформа Entity Framework позволяет задавать время ожидания команд с помощью свойств ObjectContext.QueryTimeout или EntityCommand.CommandTimeout.
    SQL Server Compact при использовании с платформой Entity Framework не поддерживает параметры времени ожидания. Иными словами, не следует устанавливать для времени ожидания команды значения, отличные от нуля. Если задать значение для времени ожидания соединения, база данных SQL Server Compact сформирует исключение NotSupportedException(“CommandTimeout”).

  • SQL Server Compact поддерживает только строки в Юникоде.
    Платформа Entity Framework поддерживает строки как в Юникоде, так и не в Юникоде. SQL Server Compact поддерживает только строки в Юникоде. Константы <literal> типа String не поддерживаются текущим поставщиком. При использовании строк не в Юникоде SQL Server Compact создаст исключение «near constant literal».

  • SQL Server Compact не поддерживает хранимые процедуры и представления.

Пример

Сведения о создании приложений на платформе Entity Framework, использующих в качестве источника данных базу данных SQL Server Compact, см. в разделе Создание приложения платформы Entity Framework (SQL Server Compact).

См. также

Другие ресурсы

Построение приложений с управляемым кодом (SQL Server Compact)

Справка и поддержка

Получение помощи (SQL Server Compact 3.5 с пакетом обновления 1)