Поставщики Entity Framework 6

Замечание

EF6 и более поздние версии — функции, API и т. д., рассмотренные на этой странице, были представлены в Entity Framework 6. Если вы используете более раннюю версию, некоторые или все сведения не применяются.

Платформа Entity Framework в настоящее время разрабатывается под лицензией с открытым исходным кодом и EF6 и выше не будет отправлена в составе .NET Framework. Это имеет множество преимуществ, но также требует, чтобы поставщики EF были перестроены на сборки EF6. Это означает, что провайдеры или поставщики EF для EF5 и ниже не будут работать с EF6, пока не произойдёт их повторная сборка.

Какие поставщики доступны для EF6?

Поставщики, о которых мы знаем, которые были перестроены для EF6, включают:

Обратите внимание, что включение в этот список не указывает уровень функциональности или поддержки данного поставщика, только то, что сборка для EF6 была доступна.

Регистрация поставщиков EF

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

Регистрация файла конфигурации

Регистрация поставщика EF в app.config или web.config имеет следующий формат:

    <entityFramework>
       <providers>
         <provider invariantName="My.Invariant.Name" type="MyProvider.MyProviderServices, MyAssembly" />
       </providers>
    </entityFramework>

Обратите внимание, что часто если поставщик EF установлен из NuGet, пакет NuGet автоматически добавит эту регистрацию в файл конфигурации. Если вы устанавливаете пакет NuGet в проект, который не является проектом запуска приложения, может потребоваться скопировать регистрацию в файл конфигурации для запускаемого проекта.

InvariantName в этой регистрации совпадает с инвариантным именем, используемым для идентификации поставщика ADO.NET. Это можно найти в качестве атрибута "invariant" в регистрации DbProviderFactories и в качестве атрибута "providerName" в регистрации строки подключения. Инвариантное имя, используемое, также должно быть включено в документацию для поставщика. Примерами инвариантных имен являются System.Data.SqlClient для SQL Server и System.Data.SqlServerCe.4.0 для SQL Server Compact.

В этой регистрации “type” является сборочно-квалифицированным именем типа поставщика, который выводится из “System.Data.Entity.Core.Common.DbProviderServices”. Например, строка, используемая для SQL Compact, — System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact. Тип, используемый здесь, должен быть включен в документацию для поставщика.

Регистрация на основе кода

Начиная с Entity Framework 6, конфигурацию для всей программы можно задавать в коде. Полные сведения см. в разделе Entity Framework Code-Based Configuration. Обычный способ регистрации поставщика EF с помощью конфигурации на основе кода — создать новый класс, производный от System.Data.Entity.DbConfiguration, и поместить его в ту же сборку, что и класс DbContext. Затем класс DbConfiguration должен зарегистрировать поставщика в конструкторе. Например, класс DbConfiguration для регистрации поставщика SQL Compact выглядит следующим образом:

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            SetProviderServices(
                SqlCeProviderServices.ProviderInvariantName,
                SqlCeProviderServices.Instance);
        }
    }

В этом коде строка "SqlCeProviderServices.ProviderInvariantName" служит удобной константой для имени поставщика SQL Server Compact ("System.Data.SqlServerCe.4.0"), а SqlCeProviderServices.Instance возвращает одиночный экземпляр поставщика SQL Compact EF.

Что делать, если поставщик, который мне нужен, недоступен?

Если поставщик доступен для предыдущих версий EF, мы рекомендуем обратиться к владельцу поставщика и попросить его создать версию EF6. Необходимо включить ссылку на документацию по модели поставщика EF6.

Могу ли я самостоятельно разработать поставщика услуг?

Конечно, можно создать поставщик EF самостоятельно, хотя это не следует считать тривиальной задачей. Ссылка выше о модели поставщика EF6 является хорошим местом для начала. Вы также можете считать полезным использование кода для поставщика SQL Server и SQL CE, включенного в базу кода с открытым исходным кодом EF в качестве отправной точки или справочного материала.

Обратите внимание, что начиная с EF6 поставщик EF менее тесно связан с базовым поставщиком ADO.NET. Это делает проще создание провайдера EF без необходимости создавать или обертывать классы ADO.NET.