Применение миграций в Docker контейнере C#

Такой вопрос, выпустил приложение(Web Api) такой командой dotnet publish -c Release -r linux-x64 --self-contained

Создалась папка publish, в котором всё приложение. Но в приложении у меня используется Entiry Framework Core, соответственно на этапе разработки я разворачивал Postresql в контейнере, создавал и применял миграции. Но надо ли их создавать и применять внутри контейнера после выпуска приложения?

Условно находясь в папке publish внутри контейнера написать команды по созданию и применению миграций. Но ведь для создания миграций EF Core требует файл .csproj , а его нет в папке сборки проекта


Ответы (1 шт):

Автор решения: HILTON

Привет я использую такой метод расширения

using Microsoft.EntityFrameworkCore;
using PostService.Infrastructure.Context;

namespace PostService.Host.Extensions;

/// <summary>
/// Методы расширения для класса <see cref="WebApplication"/>.
/// </summary>
public static class WebApplicationExtensions
{
    /// <summary>
    /// Применение миграции к бд.
    /// </summary>
    /// <param name="webApplication"><see cref="WebApplication"/>.</param>
    public static void ApplyMigrations(this WebApplication webApplication)
    {
        using var scope = webApplication.Services.CreateScope();
        var context = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
        var pendingMigrations = context.Database.GetPendingMigrations();

        if (pendingMigrations.Any())
        {
            context.Database.Migrate();
            Console.WriteLine("--> Migration apply");
        }
    }
}

И вызываю его в Program.cs

var app = builder.Build();

if (builder.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI(options =>
    {
        options.SwaggerEndpoint("swagger/v1/swagger.json", "v1");
        options.RoutePrefix = string.Empty;
    });
}

app.ApplyMigrations(); // Тут вызов
app.AddPostEndpoints();

app.Run();
→ Ссылка