Owe*_*ing 8 c# docker entity-framework-core asp.net-core
我有一个 ASP.Net Core 应用程序,它使用带有 Sqlite 的实体框架。我正在构建一个 Docker 镜像来部署它。
使用 VS Code 调试时,ASP.Net Core 应用程序运行良好,但在 Docker 容器中运行时,我收到一个错误:
SqliteException:SQLite 错误 1:“没有这样的表:MyTable”。
我认为这是因为我在构建 Docker 镜像时需要运行实体框架迁移。我已经添加dotnet ef database update到我的 Dockerfile 中,它看起来像:
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
RUN dotnet ef database update
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "MyApplication.dll"]
Run Code Online (Sandbox Code Playgroud)
图像构建没有错误。但是,当我创建一个容器并查看数据库时,它是空的,没有表。
构建 Docker 镜像时,使用 Entity Framework 设置数据库的正确方法是什么?
Mic*_*h91 20
对于 .net 6 上的任何人,我使用它在启动时在 Program.cs 文件中的 app.Run() 之前应用迁移
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
var context = services.GetRequiredService<ApplicationDbContext>();
if (context.Database.GetPendingMigrations().Any())
{
context.Database.Migrate();
}
}
Run Code Online (Sandbox Code Playgroud)
无论您的部署类型如何,您都可以在运行时在 Configure 方法的最后对 Startup 类应用迁移,例如调用以下方法:
public void ApplyMigrations(ApplicationDbContext context) {
if (context.Database.GetPendingMigrations().Any()) {
context.Database.Migrate();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6719 次 |
| 最近记录: |