添加第二个 EF 核心数据库后 Blazor 服务器端 docker 容器分段错误

Posted

技术标签:

【中文标题】添加第二个 EF 核心数据库后 Blazor 服务器端 docker 容器分段错误【英文标题】:Blazor server side docker container segmentation fault after adding second EF core database 【发布时间】:2021-10-05 08:11:15 【问题描述】:

所以,我一直在尝试对 blazor 服务器端应用程序进行身份验证。启动和运行 UI 进展顺利,第一个问题是尝试在无法解密的云平台上运行容器时出现,然后归结为密钥的默认存储,使得它们在容器重启后丢失。因此,我觉得最简单的解决方案就是添加第二个数据库,就像提到的here 一样。在那里的文档中,两个 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 容器中运行。

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于添加第二个 EF 核心数据库后 Blazor 服务器端 docker 容器分段错误的主要内容,如果未能解决你的问题,请参考以下文章

多个 Blazor 应用程序,相同的托管。从第一个应用程序重定向到第二个应用程序。 Azure 应用服务

Blazor:在前一个操作完成之前在此上下文上启动了第二个操作

Blazor 服务器应用程序和 IDbContextFactory 未处理

除了 dbContext 之外,如何向 Blazor 中的服务添加参数?

Blazor 服务器:将 EF Core DbContextFactory 与 DbContext 混合

在 Blazor 中使用带有 AddDbContextFactory 的标识