用**.NET 6.0**编写的教程
这篇文章展示了使用Entity Framework Core连接.NET 6 API和PostgreSQL的步骤,并使用EF Core迁移从代码中自动创建/更新PostgreSQL数据库。
我们将从我最近发布的教程中的一个.NET 6 CRUD API例子开始,它默认使用EF Core InMemory db提供者进行测试,我们将更新它以连接到PostgreSQL数据库,并运行EF Core迁移来从代码中自动生成数据库和表。关于.NET CRUD API的全部细节,请看.NET 6.0 - CRUD API实例和教程。
教程内容
本教程所需的工具
要完成本教程中的步骤,你需要以下工具。
-
.NET SDK- 包括.NET运行时和命令行工具。
-
Visual Studio Code- 可以在Windows、Mac和Linux上运行的代码编辑器。如果你有一个不同的首选代码编辑器,那也是可以的。
-
Visual Studio Code的C#扩展- 为VS Code增加了对开发.NET应用程序的支持。
-
PostgreSQL - 你需要访问一个运行中的PostgreSQL服务器实例来连接API,它可以是远程的(如Azure,AWS等)或在你的本地机器上。PostgreSQL的下载页面在www.postgresql.org/download/,确保它被启动,以便API可以连接到它。你也可以在Docker容器中运行它,Postgres的官方docker镜像可在hub.docker.com/_/postgres。
下载并运行示例的.NET API
按照以下步骤,在你的本地机器上下载并运行.NET 6 CRUD API,并使用默认的EF Core InMemory数据库。
- 从github.com/cornflourbl…下载或克隆教程项目代码
- 在项目根目录下(WebApi.csproj文件所在的位置)通过命令行运行
dotnet run,启动api,你应该看到消息Now listening on: http://localhost:4000。 - 你可以直接用Postman等工具来测试API,或者将其与现有的Angular或React应用实例挂钩。
在调试模式下启动
你也可以在VS Code中以调试模式启动应用程序,方法是在VS Code中打开项目根目录并按下F5,或者从顶部菜单中选择Debug -> Start Debugging,在调试模式下运行允许你附加断点以暂停执行并逐步通过应用程序代码。详细说明包括一个简短的演示视频,请看VS Code + .NET - 在Visual Studio Code中调试一个.NET网络应用程序。
更新.NET API以使用PostgreSQL
从NuGet添加PostgreSQL数据库提供者
在项目根目录下运行以下命令,从NuGet安装用于PostgreSQL的EF Core数据库提供程序。
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
在应用程序设置中添加连接字符串
打开appsettings.json 文件,在条目"ConnectionStrings" 中添加一个 PostgreSQL 连接字符串的子条目(例如"WebApiDatabase" ),连接字符串的格式应该是"Host=[DB SERVER URL]; Database=[DB NAME]; Username=[USERNAME];Password=[PASSWORD]" 。
当EF Core迁移生成数据库时,database ,这个值将是在PostgreSQL中创建的数据库的名称。
更新后的带有连接字符串的appsettings.json 文件看起来应该是这样的。
{
"ConnectionStrings": {
"WebApiDatabase": "Host=localhost; Database=dotnet-6-crud-api; Username=postgres; Password=mysecretpassword"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
更新数据上下文以使用PostgreSQL
位于/Helpers/DataContext.cs 的DataContext 类是用来通过Entity Framework访问应用程序数据的。它派生自Entity FrameworkDbContext 类,并有一个公共的Users 属性用于访问和管理用户数据。
更新OnConfiguring() 方法,通过用options.UseNpgsql(Configuration.GetConnectionString("WebApiDatabase")); 替换options.UseInMemoryDatabase("TestDb"); ,连接到PostgreSQL而不是内存数据库。
更新后的DataContext 类应该看起来像这样。
namespace WebApi.Helpers;
using Microsoft.EntityFrameworkCore;
using WebApi.Entities;
public class DataContext : DbContext
{
protected readonly IConfiguration Configuration;
public DataContext(IConfiguration configuration)
{
Configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
// connect to postgres with connection string from app settings
options.UseNpgsql(Configuration.GetConnectionString("WebApiDatabase"));
}
public DbSet Users { get; set; }
}
使用EF Core Migrations从代码中创建PostgreSQL数据库
安装dotnet ef工具
.NET实体框架核心工具(dotnet ef)被用来生成EF核心迁移,在全球范围内安装EF核心工具,运行dotnet tool install -g dotnet-ef ,或者更新运行dotnet tool update -g dotnet-ef 。关于EF Core工具的更多信息,请看docs.microsoft.com/ef/core/cli…
从NuGet添加EF Core设计包
在项目根目录下运行下面的命令来安装EF Core设计包,它提供了跨平台的命令行工具支持,用于生成EF Core迁移。
dotnet add package Microsoft.EntityFrameworkCore.Design
生成EF Core迁移文件
通过从项目根目录(WebApi.csproj文件所在的位置)运行dotnet ef migrations add InitialCreate ,生成新的EF Core迁移文件,这些迁移文件将为.NET Core API创建数据库和表。
执行EF Core迁移
在项目根目录下运行命令dotnet ef database update ,执行EF Core迁移,并在PostgreSQL中创建数据库和表。
检查Postgres,你现在应该看到你的数据库中有表Users 和__EFMigrationsHistory 。
重新启动.NET 6.0 CRUD API
在项目根目录下用命令dotnet run ,停止并重启API,你应该看到信息Now listening on: http://localhost:4000 ,API现在应该连接到Postgres。