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

升级Duende Identity Server 6.3至7版本时EF迁移报错求助

解决Duende Identity Server 6.3升级到7.0时EF迁移DbContext解析错误

以下是针对该错误的排查和解决步骤:

  • 确认DbContext服务配置正确
    检查Program.cs(或Startup.cs)中,是否为Duende的两个DbContext正确配置了数据库连接和提供商。确保代码类似如下:

    builder.Services.AddIdentityServer()
        .AddConfigurationStore(options =>
        {
            options.ConfigureDbContext = b =>
                b.UseSqlServer(builder.Configuration.GetConnectionString("IdentityServerConfigurationDb"),
                    sql => sql.MigrationsAssembly(typeof(Program).Assembly.FullName));
        })
        .AddOperationalStore(options =>
        {
            options.ConfigureDbContext = b =>
                b.UseSqlServer(builder.Configuration.GetConnectionString("IdentityServerPersistedGrantDb"),
                    sql => sql.MigrationsAssembly(typeof(Program).Assembly.FullName));
        });
    

    注意替换对应的数据库提供商(如UseNpgsql、UseSqlite等)和连接字符串名称。

  • 添加设计时DbContext工厂
    EF迁移工具在设计时可能无法通过依赖注入获取DbContext配置,需实现IDesignTimeDbContextFactory<T>接口。为每个DbContext创建工厂类:
    ConfigurationDbContext工厂示例:

    using Duende.IdentityServer.EntityFramework.DbContexts;
    using Microsoft.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore.Design;
    using Microsoft.Extensions.Configuration;
    using System.IO;
    
    public class ConfigurationDbContextFactory : IDesignTimeDbContextFactory<ConfigurationDbContext>
    {
        public ConfigurationDbContext CreateDbContext(string[] args)
        {
            var config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();
    
            var optionsBuilder = new DbContextOptionsBuilder<ConfigurationDbContext>();
            optionsBuilder.UseSqlServer(config.GetConnectionString("IdentityServerConfigurationDb"),
                b => b.MigrationsAssembly(typeof(Program).Assembly.FullName));
    
            return new ConfigurationDbContext(optionsBuilder.Options);
        }
    }
    

    同样创建PersistedGrantDbContextFactory,替换对应的DbContext类型和连接字符串。

  • 指定项目目录运行迁移命令
    如果是多项目解决方案,确保运行命令时当前目录是包含Identity Server项目的目录,或者添加--project参数指定项目路径:

    dotnet ef migrations add Update_DuendeIdentityServer_v7_0 -c ConfigurationDbContext -o Migrations/ConfigurationDb --project ./YourIdentityServerProjectFolder
    
  • 验证NuGet包版本兼容性
    确保所有Duende相关包(Duende.IdentityServer、Duende.IdentityServer.EntityFramework)都升级到7.x版本,且EF Core版本(如Microsoft.EntityFrameworkCore.SqlServer)与Duende v7要求的版本兼容(通常为EF Core 7.0及以上)。

内容的提问来源于stack exchange,提问作者skoley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:03:27