You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类库项目中通过Design Time DbContext Factory读取UserSecrets连接字符串

解决方案

1. 安装必要NuGet包

在Catalog.Data类库项目中执行以下命令,添加配置相关依赖:

dotnet add package Microsoft.Extensions.Configuration.UserSecrets
dotnet add package Microsoft.Extensions.Configuration.Json

2. 修改CatalogDbContextFactory代码

更新配置构建逻辑,加载用户机密并修正配置文件路径:

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using System.Reflection;
using System.IO;

public class CatalogDbContextFactory : IDesignTimeDbContextFactory<CatalogDbContext>
{
    public CatalogDbContext CreateDbContext(string[] args)
    {
        // 获取类库程序集所在目录,确保定位到正确的appsettings.json
        var assembly = Assembly.GetExecutingAssembly();
        var assemblyDir = Path.GetDirectoryName(assembly.Location);

        var configuration = new ConfigurationBuilder()
            .SetBasePath(assemblyDir)
            .AddJsonFile("appsettings.json", optional: false)
            // 加载当前类库项目的用户机密,泛型参数绑定Factory自身即可自动获取项目机密ID
            .AddUserSecrets<CatalogDbContextFactory>()
            .Build();

        var connectionString = configuration.GetConnectionString(nameof(CatalogDbContext));
        
        if (string.IsNullOrEmpty(connectionString))
        {
            throw new InvalidOperationException("未找到名为CatalogDbContext的连接字符串");
        }

        var optionsBuilder = new DbContextOptionsBuilder<CatalogDbContext>();
        optionsBuilder.UseSqlServer(connectionString);

        return new CatalogDbContext(optionsBuilder.Options);
    }
}

3. 验证用户机密配置

进入Catalog.Data项目目录,执行命令确认机密已正确配置:

dotnet user-secrets list

应输出包含ConnectionStrings:CatalogDbContext的完整连接字符串。

4. 重新执行迁移命令

回到Catalog.Api目录,重新运行迁移命令:

dotnet ef migrations add Catalog.Initial --project ..\Catalog.Data\Catalog.Data.csproj --verbose

关键说明

  • AddUserSecrets<T>():通过泛型参数绑定类库内的类型(如CatalogDbContextFactory),自动关联该项目的用户机密,无需手动指定机密ID。
  • 配置路径修正:使用类库程序集目录作为配置基路径,避免因命令执行目录不同导致找不到appsettings.json的问题。
  • 空值校验:添加连接字符串非空判断,抛出更明确的错误信息,便于排查。

内容的提问来源于stack exchange,提问作者Tech with Thiru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:27:14