質問: Entity FrameworkとSqliteを使用するASP.Net Coreアプリケーションがあります。これを展開するDockerイメージを作成しています。 ASP.Net CoreアプリケーションはVS Codeでデバッグする場合は正常に実行されますが、Dockerコンテナーで実行する場合はエラーが表示されます。 > SqliteException:SQLiteエラー1: 'そのようなテーブルはありません:MyTable'。 > > これは、DockerイメージをビルドするときにEntity Frameworkの移行を実行する必要があるためだと考えました。 Dockerfileにdotnet `dotnet ef database update`を追加しました。 ``` 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"] ``` イメージはエラーなしでビルドされます。ただし、コンテナを作成してデータベースを見ると、テーブルがなく空です。 Dockerイメージを構築するときにEntity Frameworkでデータベースをセットアップする正しい方法は何ですか?
回答: 展開の種類に関係なく、Configureメソッドの最後にあるStartupクラスで実行時に移行を適用できます。たとえば、次のメソッドを呼び出します。 ``` public void ApplyMigrations(ApplicationDbContext context) { if (context.Database.GetPendingMigrations().Any()) { context.Database.Migrate(); } } ```