首页 > 解决方案 > 添加第二个 EF 核心数据库后 Blazor 服务器端 docker 容器分段错误

问题描述

因此,我一直在尝试对 blazor 服务器端应用程序进行身份验证。启动和运行 UI 进展顺利,第一个问题是尝试在无法解密的云平台上运行容器时出现,然后归结为密钥的默认存储,使得它们在容器重启后丢失。因此,我觉得最简单的解决方案就是添加第二个数据库,就像这里提到的那样。在那里的文档中,两个 dbcontexts 似乎很好,我遵循了他们的代码,两个 dbcontexts 最终看起来像这样:

using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;


namespace AuthTest.Data
{
    public class AppDbContext : IdentityDbContext
    {
        public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
        {

        }
    }
}

using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.DataProtection.EntityFrameworkCore;


namespace AuthTest.Data
{
    public class AppKeyDbContext : DbContext, IDataProtectionKeyContext
    {
        public AppKeyDbContext(DbContextOptions<AppKeyDbContext> options) : base(options)
        {

        }
        public DbSet<DataProtectionKey> DataProtectionKeys { get; set; }

    }
}

和配置服务:

    services.AddDbContext<AppDbContext>(options => options.UseSqlite("DataSource=app.db"));
    services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<AppDbContext>();
    services.AddScoped<AuthenticationStateProvider, ServerAuthenticationStateProvider>();
    
    services.AddDbContext<AppKeyDbContext>(options => options.UseSqlite("DataSource=key.db"));
    services.AddDataProtection().PersistKeysToDbContext<AppKeyDbContext>();

现在构建容器一开始只有一个 dbcontext 运行良好,在添加第二个之后它首先无法添加迁移和更新数据库,这是一个简单的修复,将 --context 标志添加到这些命令。但是现在有了一个构建良好的容器之后,我最终得到了一个由于分段错误而立即崩溃的 .dll。

现在我很难过。由于我在这两种情况下的 dotnet ef 命令都没有出错,而且 dotnet 构建也通过了,所以我真的不知道从哪里开始。并且 docker inspect / logs 没有提供我能找到的任何信息。值得一提的是,最终的 dotnet .dll 命令在 mcr.microsoft.com/dotnet/aspnet:5.0-alpine 容器中运行。

标签: dockerasp.net-coreentity-framework-coreblazorblazor-server-side

解决方案


好吧,如果有人最终遇到同样的问题,我写的最后一行实际上很有价值。删除“-alpine”部分并为我的运行时容器使用“正常” aspnet:5.0 证明最终为我解决了这个问题。


推荐阅读