Платформа 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 предусмотрена поддержка платформы Entity Framework для платформы веб-приложений, начиная с SQL Server Compact 4.0.

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

Для использования платформы Entity Framework в SQL Server Compact 4.0 нужно сначала установить платформу Entity Framework. Платформа Entity Framework является компонентом в составе .NET Framework 4.

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

В выпуске SQL Server Compact 4.0SQL Server Compact предоставляется управляемая сборка System.Data.SQLServerCe.Entity.dll. Сборка System.Data.SQLServerCe.Entity.dll используется управляемым поставщиком данных ADO.NET System.Data.SqlServerCE.dll внутренним образом и поддерживает доступ к данным, описанным в модели EDM.

При установке SQL Server Compact 4.0 или более поздних выпусков SQL Server Compact (SSCERuntime-RUS.msi) System.Data.SQLServerCe.Entity.dll устанавливается в папке %ProgramFiles%\Microsoft SQL Server Compact Edition\v4.0.

Примечание

SQL Server Compact 4.0 можно использовать только с Entity Framework 4 в .NET Framework версии 4. SQL Server Compact 4.0 не поддерживает .NET Framework 3.5 и выдает ошибку.

«Сначала код» / «Только код»

SQL Server Compact 4.0 поддерживает модель программирования «сначала код», принятую в среде ADO.NET Entity Framework 4. Имеется два метода создания веб-приложений Entity Framework: сначала база данных и сначала модель. «Сначала модель» — новая возможность платформы ADO.NET Entity Framework 4 (.NET Framework 4), позволяющая построить рабочий процесс в большей степени вокруг кода — подход, известный как Разработка «Сначала код»/«Только код». В данном рабочем процессе моделью является КОД. Модель программирования «сначала код» выглядит следующим образом:

  • Для использования модели «только код» следует создать некоторые классы POCO (традиционные объекты среды CLR). Они состоят главным образом из конструкторов.

  • Следующий шаг — написать класс, который наследуется от класса ObjectContext и описывает форму модели и способ доступа к классам POCO. Это класс, совместимый с платформой Entity Framework.

На этом этапе есть все необходимое для CLR, но класс ObjectContext нельзя использовать без метаданных платформы Entity Framework, которые хранятся в файле EDMX. В модели «только код» файл EDMX отсутствует.

  • Для использования этих метаданных необходимо определить ContextBuilder, где определяется SqlConnection. ContextBuilder просматривает свойства ObjectContext и выводит концептуальную модель, модель хранения и сопоставление. Затем он использует метаданные и соединение SqlConnection, переданное через ContextBuilder, для создания соединения EntityConnection.

  • После этого создается экземпляр ObjectContext (путем передачи EntityConnection конструктору, созданному в классах POCO).

  • Как только будет создан экземпляр контекста, можно будет делать с помощью методов расширения множество вещей:

    1. Автоматически создавать скрипт базы данных.

    2. Проверять наличие базы данных.

    3. Создавать базу данных.

    4. Удалять базу данных и т. д.

Вместо того чтобы использовать соглашения, их можно переопределять. В платформе Entity Framework 4 ContextBuilder рефакторизован в ModelBuilder и DbModel.

Загрузить ADO.NET Entity Framework 4.

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

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

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

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

    Платформа Entity Framework позволяет определять типы сущностей с создаваемыми сервером ключами или значениями. Операция по манипулированию данными для сущности, у которой тип создаваемого сервером значения отличается от идентификатора, приводит к возникновению исключения «Не поддерживается».

  • Создание модели EDM для SQL Server Compact 4.0 завершится с ошибкой, если имена ограничений в схеме SQL Server Compact дублируются.

    В SQL Server Compact имена ограничений уникальны в пределах таблицы, что делает возможным наличие одинаковых имен ограничений в базе данных. Это поведение отличается от поведения SQL Server, где имена ограничений уникальны в пределах базы данных. Если в схеме SQL Server Compact 4.0 есть одинаковые имена ограничений ссылочной целостности (связи «первичный ключ — внешний ключ»), то создание модели EDM с помощью мастера моделей EDM ADO.NET Entity Framework завершится с ошибкой. Следует всегда поддерживать уникальность имен ограничений во всей базе данных, например путем добавления имени таблицы к имени ограничения.

  • 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)) 
    

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

  • 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)