练习 - 将 SQLite 数据库提供程序与 EF Core 结合使用

已完成

在此之前,你已将数据保存在内存数据库中。 此数据库在开发应用程序时非常容易设置和使用,但数据不是持久的。 因此,在应用程序重启时数据将丢失。 在部署应用程序之前,需要将数据持久保存到数据库。

在此练习中,你将升级应用程序以使用关系数据库来存储数据。 你将使用 SQLite 来存储数据。

设置 SQLite 数据库

完成以下部分以设置 SQLite 数据库。

安装以下工具和包

在终端中,安装以下包:

  1. SQLite EF Core 数据库提供程序:可以通过名为数据库提供程序的插件库访问许多不同的数据库。 以下包是用于 Entity Framework (EF) Core 的 SQLite 数据库提供程序。

    dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 8.0
    
  2. EF Core 工具:EF Core 工具执行设计时开发任务。 例如,它们基于现有数据库创建迁移、应用迁移和生成模型代码。

    dotnet tool install --global dotnet-ef
    
  3. Microsoft.EntityFrameworkCore.Design:包含 EF Core 用于创建数据库的所有设计时逻辑。

    dotnet add package Microsoft.EntityFrameworkCore.Design --version 8.0
    

启用数据库创建

要启用数据库创建,需要设置数据库连接字符串。 然后,将数据模型迁移到 SQLite 数据库。

  1. 在 Program.cs 的 var builder = WebApplication.CreateBuilder(args); 下,添加一个连接字符串。

    var connectionString = builder.Configuration.GetConnectionString("Pizzas") ?? "Data Source=Pizzas.db";
    

    此代码检查配置提供程序是否有一个名为“Pizzas”的连接字符串。 如果找不到该字符串,它将使用 Data Source=Pizzas.db 作为连接字符串。 SQLite 会将此字符串映射到文件。

  2. 在本教程的 CRUD 部分,你使用的是内存数据库。 现在,要将内存数据库替换为永久性数据库。

    将生成服务中的当前内存数据库实现 builder.Services.AddDbContext<PizzaDb>(options => options.UseInMemoryDatabase("items")); 替换为此处的 SQLite 数据库:

    builder.Services.AddSqlite<PizzaDb>(connectionString);
    
  3. 利用 EF Core 迁移工具,你现在可以生成首次迁移 InitialCreate。 保存所有更改,然后运行以下命令:

    dotnet ef migrations add InitialCreate
    

    EF Core 将在项目目录中创建“Migrations”文件夹,该文件夹包含两个文件,其中包含表示数据库迁移的代码。

  4. 完成迁移后,可以使用它来创建数据库和架构。

    在终端窗口中,运行以下 database update 命令,将迁移应用到数据库:

    dotnet ef database update
    

    你应在项目目录中看到新创建的 Pizzas.db 文件。

运行和测试应用程序

现在,你已经有了一个后备数据库,更改将永久保留。

像以前一样使用 dotnet run 和 Swagger UI 来测试应用程序。 使用 Ctrl+C 命令停止运行应用程序。 然后再次运行该应用程序,并验证更改是否仍然保留在“Pizzas.db”中。

恭喜! 你已将一个数据库与最小 API 相连!