Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
EF6 и более поздние версии — функции, API и т. д., рассмотренные на этой странице, были представлены в Entity Framework 6. Если вы используете более раннюю версию, некоторые или все сведения не применяются.
Платформа Entity Framework в настоящее время разрабатывается под лицензией с открытым исходным кодом и EF6 и выше не будет отправлена в составе .NET Framework. Это имеет множество преимуществ, но также требует, чтобы поставщики EF были перестроены на сборки EF6. Это означает, что провайдеры или поставщики EF для EF5 и ниже не будут работать с EF6, пока не произойдёт их повторная сборка.
Какие поставщики доступны для EF6?
Поставщики, о которых мы знаем, которые были перестроены для EF6, включают:
-
Поставщик Microsoft SQL Server
- Построенный из базы кода с открытым кодом Entity Framework
- Поставляется в составе пакета NuGet EntityFramework
-
Поставщик Microsoft SQL Server Compact Edition
- Построенный из базы кода с открытым кодом Entity Framework
- Отправлено в пакет NuGet EntityFramework.SqlServerCompact
-
Поставщики данных Devart dotConnect
- Существуют сторонние поставщики из Devart для различных баз данных, включая Oracle, MySQL, PostgreSQL, SQLite, Salesforce, DB2 и SQL Server
-
Поставщики программного обеспечения CData
- Существуют сторонние поставщики из CData Software для различных хранилищ данных, включая Salesforce, хранилище таблиц Azure, MySql и многое другое.
-
Поставщик Firebird
- Доступно как пакет NuGet
-
Поставщик Visual Fox Pro
- Доступно как пакет NuGet
- MySQL
-
PostgreSQL
- Npgsql доступен в виде пакета NuGet
-
Oracle
- ODP.NET доступен в виде пакета NuGet
-
SQLite
- System.Data.SQLite доступен в виде пакета NuGet
Обратите внимание, что включение в этот список не указывает уровень функциональности или поддержки данного поставщика, только то, что сборка для 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.