练习 - 将 SQLite 数据库提供程序与 EF Core 结合使用
在此之前,你已将数据保存在内存数据库中。 此数据库在开发应用程序时非常容易设置和使用,但数据不是持久的。 因此,在应用程序重启时数据将丢失。 在部署应用程序之前,需要将数据持久保存到数据库。
在此练习中,你将升级应用程序以使用关系数据库来存储数据。 你将使用 SQLite 来存储数据。
设置 SQLite 数据库
完成以下部分以设置 SQLite 数据库。
安装以下工具和包
在终端中,安装以下包:
SQLite EF Core 数据库提供程序:可以通过名为数据库提供程序的插件库访问许多不同的数据库。 以下包是用于 Entity Framework (EF) Core 的 SQLite 数据库提供程序。
dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 8.0
EF Core 工具:EF Core 工具执行设计时开发任务。 例如,它们基于现有数据库创建迁移、应用迁移和生成模型代码。
dotnet tool install --global dotnet-ef
Microsoft.EntityFrameworkCore.Design:包含 EF Core 用于创建数据库的所有设计时逻辑。
dotnet add package Microsoft.EntityFrameworkCore.Design --version 8.0
启用数据库创建
要启用数据库创建,需要设置数据库连接字符串。 然后,将数据模型迁移到 SQLite 数据库。
在 Program.cs 的
var builder = WebApplication.CreateBuilder(args);
下,添加一个连接字符串。var connectionString = builder.Configuration.GetConnectionString("Pizzas") ?? "Data Source=Pizzas.db";
此代码检查配置提供程序是否有一个名为“Pizzas”的连接字符串。 如果找不到该字符串,它将使用
Data Source=Pizzas.db
作为连接字符串。 SQLite 会将此字符串映射到文件。在本教程的 CRUD 部分,你使用的是内存数据库。 现在,要将内存数据库替换为永久性数据库。
将生成服务中的当前内存数据库实现
builder.Services.AddDbContext<PizzaDb>(options => options.UseInMemoryDatabase("items"));
替换为此处的 SQLite 数据库:builder.Services.AddSqlite<PizzaDb>(connectionString);
利用 EF Core 迁移工具,你现在可以生成首次迁移
InitialCreate
。 保存所有更改,然后运行以下命令:dotnet ef migrations add InitialCreate
EF Core 将在项目目录中创建“Migrations”文件夹,该文件夹包含两个文件,其中包含表示数据库迁移的代码。
完成迁移后,可以使用它来创建数据库和架构。
在终端窗口中,运行以下
database update
命令,将迁移应用到数据库:dotnet ef database update
你应在项目目录中看到新创建的 Pizzas.db 文件。
运行和测试应用程序
现在,你已经有了一个后备数据库,更改将永久保留。
像以前一样使用 dotnet run
和 Swagger UI 来测试应用程序。 使用 Ctrl+C 命令停止运行应用程序。 然后再次运行该应用程序,并验证更改是否仍然保留在“Pizzas.db”中。
恭喜! 你已将一个数据库与最小 API 相连!