Меню Закрыть

Entity framework core sqlite

Содержание

Добавление SQLite и Entity Framework в проект UWP

SQLite являются официально рекомендуемой системой управления баз данных для создания локального хранилища данных в Windows 10. SQLite обладает такими преимуществами, как компактность, кроссплатформенность, переносимость, ее не надо разворачивать на сервере, что делает ее очень удобным инструментом в мобильной разработке для разных ОС. Рассмотрим, как мы можем использовать SQLite при программирования в приложениях Universal Windows Platform. Прежде всего создадим новый проект, который назовем SQLiteApp .

Прежде всего для работы с SQLite нам надо устанавить для Visual Studio соответствующее расширение. Для этого в Visual Studio перейдем к пункту меню Tools -> Extensions and Updates . И здесь среди всех расширений нам надо установить расширение SQLite for Universal App Platform :

Чтобы быстрее найти нужное расширение, надо в левом списке перейти к пункту Online и ввести в окно поиска SQLite.

Для работы с SQLite в приложении на UWP мы можем использовать разные подходы: либо работать с SQLite через одну из библиотек, которых довольно много в репозитории NuGet, либо использовать Entity Framework Core, который абстрагирует от структуры базы данных и позволяет работать с данными как с объектами стандартных классов языка C#. Наиболее простым и рекомендуемым подходом является использование Entity Framework, и в данной теме мы как раз и будем применять этот подход. Поэтому добавим пакеты Entity Framework в проект. Для работы нам понадобятся два пакета: Microsoft.EntityFrameworkCore.SQLite (непосредственно для взаимодействия с БД SQLite) и Microsoft.EntityFrameworkCore.Tools (для генерации базы данных).

При этом следует учитывать, что начиная с версии 2.0 Entity Framework поддерживает .NET Standard 2.0. UWP тоже поддерживает .NET Standard 2.0, но начиная с версии UWP 6.0, которая применяется в Windows 10 Fall Creators Update. То есть если наш проект в качестве минимальной версии использует версию Windows, которая вышла до Windows 10 Fall Creators Update, то мы можем в проекте использовать только EF Core 1.X. Если же проект в качестве минимальной и целевой версии применяет Windows 10 Fall Creators Update или более новую, то можно использовать EF Core 2.x.

Например, в моем случае (да и как правило, по умолчанию) в качестве минимальной версии применяется Windows 10 November Update:

Минимальная версия среды указывается при создании проекта и потом ее можно увидеть и изменить в свойствах проекта.

Поскольку минимальная версия Windows 10 November Update использует версию UWP, которая не применяет .NET Standard 2.0, то для работы мне надо установить версии пакетов Entity Framework Core 1.x.

Соответственно если бы проект использовал в качестве целевой и минимальной версий Windows 10 Fall Creators Update или более новую:

То мы могли бы использовать пакеты Entity Framework Core версий 2.х:

Теперь создадим модели, которые будут описывать данные и объекты которых будут храниться в бд SQLite. Для этого добавим в проект два класса. Класс Phone, который будет представлять модель телефона:

И класс Company, который представляет компанию-производителя телефона:

Итак, у нас здесь две модели, которые связаны связью "один-ко-многим", то есть одной компании может принадлежать много телефонов. А модель телефона хранит ссылку на определенную компанию.

Читайте также:  Глаз тв смотри и слушай

При использовании Entity Framework нам надо учитывать некоторые условности. Во-первых, каждая модель должна иметь свойство-уникальный идентификатор, который должен называться Id или по шаблону [Класс]Id , например, для класса Phone это было бы свойство PhoneId . По этому уникальному идентификатору данные будут уникально различаться в базе данных.

Во-вторых, для создания связи "один-ко-многим" зависимая модель должна содержать ключ. В нашем случае зависимой моделью является Phone, поэтому он определяет ключ в виде двух свойств:

Свойство CompanyId хранит идентификатор модели Company, которая связана с данной моделью Phone. А свойство Company является ссылкой на этот связанный объект Company.

Для хранения всех объектов Phone в классе Company определено свойство

После определения моделей нам надо добавить в проект класс контекста данных, через который приложение будет взаимодействовать с базой данных.

Итак, добавим в проект новый класс MobileContext:

Класс контекста данных должен быть унаследован от базового класса DbContext, а для взаимодействия с таблицами в базе данных в нем определяются свойства по типу DbSet . То есть через свойство Companies будет идти взаимодействие с таблицей компаний, а через свойство Phones — взаимодействие с таблицей телефонов.

Теперь нам нужна сама база данных. Здесь есть два варианта:

У нас нет начальных данных и соответственно базы данных, однако при работе приложения после установки приложения на устройство она может потребоваться. Поэтому имеет смысл создать базу данных сразу после установки на устройство.

Microsoft.EntityFrameworkCore.Sqlite database provider allows Entity Framework Core to be used with to be used with SQLite. The provider is maintained as part of the Entity Framework Core Project.

How to Use SQLite Provider

To use SQLite database provider, the first step is to install Microsoft.EntityFrameworkCore.Sqlite NuGet package. Let’s consider a simple model which contains three entities.

The next step is to create a custom DbContext class.

In EF Core, the DbContext has a virtual method called onConfiguring which will get called internally by EF Core, and it will also pass in an optionsBuilder instance, and you can use that optionsBuilder to configure options for the DbContext.

The optionsBuilder has UseSqlite method; it expects a connection string as a parameter. Once you have a model, you can use migrations to create a database.

Run the following command in Package Manager Console.

PM> Add-Migration Initial

This command scaffold a migration to create the initial set of tables for your model. When it is executed successfully, then run the following command.

It will apply the new migration to the database. Now you can use SQLite database to insert, delete and update data.

Limitations

The SQLite provider has some migrations limitations, and mostly these limitations are not EF Core specific but underlying SQLite database engine.

  • The SQLite provider does not support schemas and Sequences.
  • The SQLite database engine does not support the following schema operations that are supported by the majority of other relational databases.
  • AddForeignKey
  • AddPrimaryKey
  • AddUniqueConstraint
  • AlterColumn
  • DropColumn
  • DropForeignKey
  • DropPrimaryKey
  • DropUniqueConstrain
  • RenameColumn
Читайте также:  Как отключить серию фото на iphone

В этом руководстве вы создадите консольное приложение .NET Core, которое осуществляет доступ к базе данных SQLite с помощью Entity Framework Core. In this tutorial, you create a .NET Core console app that performs data access against a SQLite database using Entity Framework Core.

Инструкции из этого руководства можно выполнять с помощью Visual Studio 2017 в Windows, а также .NET Core CLI в Windows, macOS или Linux. You can follow the tutorial by using Visual Studio on Windows, or by using the .NET Core CLI on Windows, macOS, or Linux.

Предварительные требования Prerequisites

Установите следующее программное обеспечение: Install the following software:

  • Интерфейс командной строки .NET Core .NET Core CLI
  • Visual Studio Visual Studio
  • пакет SDK для .NET Core 3.0; .NET Core 3.0 SDK.
  • Visual Studio 2019 16.3 или последующей версии с этой рабочей нагрузкой: Visual Studio 2019 version 16.3 or later with this workload:
  • Кроссплатформенная разработка .NET Core (в разделе Другие наборы инструментов) .NET Core cross-platform development (under Other Toolsets)

Создание нового проекта Create a new project

  • Интерфейс командной строки .NET Core .NET Core CLI
  • Visual Studio Visual Studio
  • Открытие Visual Studio Open Visual Studio
  • Щелкните Создать проект. Click Create a new project
  • Выберите Консольное приложение (.NET Core ) с тегом C# и щелкните Далее. Select Console App (.NET Core) with the C# tag and click Next
  • Задайте проекту имя EFGetStarted и щелкните Создать. Enter EFGetStarted for the name and click Create

Установка Entity Framework Core Install Entity Framework Core

Чтобы установить EF Core, установите пакеты целевых поставщиков базы данных EF Core, с которыми вы будете работать. To install EF Core, you install the package for the EF Core database provider(s) you want to target. В этом руководстве используется SQLite, так как он работает на всех платформах, поддерживаемых .NET Core. This tutorial uses SQLite because it runs on all platforms that .NET Core supports. Список доступных поставщиков см. в разделе Database Providers (Поставщики базы данных). For a list of available providers, see Database Providers.

Последовательно выберите пункты Средства > Диспетчер пакетов NuGet > Консоль диспетчера пакетов. Tools > NuGet Package Manager > Package Manager Console

Выполните следующие команды: Run the following commands:

Совет. Можно также установить пакеты, щелкнув проект правой кнопкой мыши и выбрав Управление пакетами NuGet. Tip: You can also install packages by right-clicking on the project and selecting Manage NuGet Packages

Создание модели Create the model

Задайте класс контекста и классы сущностей, составляющие модель. Define a context class and entity classes that make up the model.

  • Интерфейс командной строки .NET Core .NET Core CLI
  • Visual Studio Visual Studio
  • В каталоге проекта создайте файл Model.cs с таким кодом: In the project directory, create Model.cs with the following code
  • Щелкните проект правой кнопкой мыши и выберите Добавить > Класс. Right-click on the project and select Add > Class
  • Задайте имя Model.cs и щелкните Добавить. Enter Model.cs as the name and click Add
  • Замените все содержимое этого файла следующим кодом: Replace the contents of the file with the following code
Читайте также:  Проседает fps в gta 5

В EF Core также можно реконструировать модель из существующей базы данных. EF Core can also reverse engineer a model from an existing database.

Совет. В реальном приложении каждый класс помещается в отдельный файл, а строка подключения — в файл конфигурации или переменную среды. Tip: In a real app, you put each class in a separate file and put the connection string in a configuration file or environment variable. Для упрощения в этом руководстве все данные содержатся в одном файле. To keep the tutorial simple, everything is contained in one file.

Создание базы данных Create the database

В следующих действиях используются миграции для создания базы данных. The following steps use migrations to create a database.

Выполните следующие команды: Run the following commands:

При этом устанавливается dotnet ef и пакет конструктора, требуемый для выполнения команды в проекте. This installs dotnet ef and the design package which is required to run the command on a project. Команда migrations формирует шаблон миграции для создания начального набора таблиц в модели. The migrations command scaffolds a migration to create the initial set of tables for the model. Команда database update создает базу данных и применяет к ней созданную миграцию. The database update command creates the database and applies the new migration to it.

В консоли диспетчера пакетов выполните следующие команды: Run the following commands in Package Manager Console

При этом устанавливаются средства консоли диспетчера пакетов для EF Core. This installs the PMC tools for EF Core. Команда Add-Migration формирует шаблон миграции для создания начального набора таблиц в модели. The Add-Migration command scaffolds a migration to create the initial set of tables for the model. Команда Update-Database создает базу данных и применяет к ней созданную миграцию. The Update-Database command creates the database and applies the new migration to it.

Создание, чтение, обновление и удаление Create, read, update & delete

Откройте файл Program.cs и замените его содержимое следующим кодом: Open Program.cs and replace the contents with the following code:

Запуск приложения Run the app

В Visual Studio используется неподходящий рабочий каталог при запуске консольных приложений .NET Core Visual Studio uses an inconsistent working directory when running .NET Core console apps. (см. dotnet/project-system#3619). Это вызывает исключение, информирующее об отсутствии таблицы (блоги) . (see dotnet/project-system#3619) This results in an exception being thrown: no such table: Blogs. Чтобы обновить рабочий каталог, выполните следующие действия: To update the working directory:

Щелкните проект правой кнопкой мыши и выберите Изменить файл проекта. Right-click on the project and select Edit Project File

Непосредственно под свойством TargetFramework добавьте следующее: Just below the TargetFramework property, add the following:

Сохраните файл. Save the file

Теперь можно запустить приложение: Now you can run the app:

  • "Отладка" > "Запустить без отладки"Debug > Start Without Debugging

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.