.NET 6:如何让用户机密在 class 库中工作?

.NET 6: how to get user-secrets working in a class library?

我正在尝试将我的数据访问与我的 WebAPI 分开。

所以我为我的 entity framework core 6 模型和上下文创建了一个简单的 .NET 6 class 库 (dotnet new classlib -f net6.0 )

我在WebAPI工程中运行dotnet user-secrets init然后把.csproj文件中的<UserSecretsId>复制到DAL工程的.csproj文件中。

    // (school.WebAPI.csproj) added reference in School.WebAPI to School.DAL
    <ProjectReference Include="..\School.DAL\School.DAL.csproj" />

现在我正在尝试搭建数据库。

dotnet ef dbcontext scaffold name=ConnectionStrings:SchoolDev Microsoft.EntityFrameworkCore.SqlServer -o Models --context-dir Data --schema dbo -f

这会产生以下错误:

System.InvalidOperationException: A named connection string was used, but the name 'ConnectionStrings:SchoolDev' was not found in the application's configuration.

当我在 WebAPI 项目中 运行 相同的命令时,它完美地工作。

我读到一些关于 var builder = WebApplication.CreateBuilder(args); 被 CLI 用来读取 secrets.json 的内容。但我感到困惑,因为我觉得 WebApplication.CreateBuilder(args) 不属于 DAL 项目。

如何设置从 class 库中的 cli 访问用户机密?

您可以 运行 解决方案根目录中的 EF 命令 -s path/to/API_project -p path/to/SQL_project。 这样,它使用启动项目 (-s) 确定配置,使用项目 (-p) 定位 EF 上下文。

文档:https://docs.microsoft.com/en-us/ef/core/cli/dotnet#target-project-and-startup-project