Entity Framework
Entity Framework с SQLite
Поиск…
Вступление
SQLite - это автономная, безсерверная транзакционная база данных SQL. Он может использоваться в .NET-приложении, используя как свободно доступную библиотеку .NET SQLite, так и Entity Framework SQLite. В этом разделе рассказывается о настройке и использовании провайдера Entity Framework SQLite.
Настройка проекта для использования Entity Framework с поставщиком SQLite
Библиотека Entity Framework поставляется только с поставщиком SQL Server. Для использования SQLite потребуются дополнительные зависимости и конфигурация. Все необходимые зависимости доступны на NuGet.
Установка управляемых библиотек SQLite
Все управляемые настройки могут быть установлены с помощью консоли управления пакетами NuGet. Запустите команду Install-Package System.Data.SQLite
.
Как показано выше, при установке System.Data.SQLite
все связанные с ним управляемые библиотеки устанавливаются вместе с ним. Сюда входит System.Data.SQLite.EF6
, поставщик EF для SQLite. Проект также теперь ссылается на сборки, необходимые для использования поставщика SQLite.
Включая неуправляемую библиотеку
Управляемые библиотеки SQLite зависят от неуправляемой сборки с именем SQLite.Interop.dll
. Он входит в состав сборок пакетов, загружаемых с помощью пакета SQLite, и они автоматически копируются в ваш каталог сборки при создании проекта. Однако, поскольку он неуправляемый, он не будет включен в ваш список ссылок. Но обратите внимание: эта сборка наиболее распространена с приложением для сборки SQLite.
Примечание. Эта сборка зависит от бита, то есть вам нужно будет включить конкретную сборку для каждой битности, которую вы планируете поддерживать (x86 / x64).
Редактирование App.config проекта
Файл app.config
потребует некоторых изменений, прежде чем SQLite можно будет использовать в качестве поставщика Entity Framework.
Необходимые исправления
При установке пакета файл app.config
автоматически обновляется для включения необходимых записей для SQLite и SQLite EF. К сожалению, эти записи содержат некоторые ошибки. Они должны быть изменены до того, как они будут работать правильно.
Сначала найдите элемент DbProviderFactories
в файле конфигурации. Он находится внутри элемента system.data
и будет содержать следующее
<DbProviderFactories>
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
<remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
Это может быть упрощено, чтобы содержать одну запись
<DbProviderFactories>
<add name="SQLite Data Provider" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
При этом мы указали, что поставщики SQLite EF6 должны использовать фабрику SQLite.
Добавить строку подключения SQLite
Строки подключения могут быть добавлены в файл конфигурации в корневом элементе. Добавьте строку соединения для доступа к базе данных SQLite.
<connectionStrings>
<add name="TestContext" connectionString="data source=testdb.sqlite;initial catalog=Test;App=EntityFramework;" providerName="System.Data.SQLite.EF6"/>
</connectionStrings>
Здесь важно отметить provider
. Он был установлен в System.Data.SQLite.EF6
. Это говорит EF, что, когда мы используем эту строку соединения, мы хотим использовать SQLite. Указанный data source
является лишь примером и будет зависеть от местоположения и имени вашей базы данных SQLite.
Ваш первый SQLite DbContext
После завершения всей установки и конфигурации вы можете начать использовать DbContext
который будет работать в вашей базе данных SQLite.
public class TestContext : DbContext
{
public TestContext()
: base("name=TestContext") { }
}
Указав name=TestContext
, я указываю, что строка соединения TestContext, расположенная в файле app.config
должна использоваться для создания контекста. Эта строка подключения была настроена на использование SQLite, поэтому в этом контексте будет использоваться база данных SQLite.