Так что, если ваш сервер находится за пределами докера (что является единственной разумной вещью). Вы можете сделать это с помощью файла Docker:
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:sdk AS build
WORKDIR /src
ARG connectionString
ENV CONNECTION_STRING=$connectionString
COPY ["*********.csproj", "*********/"]
RUN dotnet restore "*********.csproj"
COPY . .
WORKDIR "/*********"
RUN dotnet build "*********" -c Release -o /app
RUN dotnet ef database update <------ HERE
FROM build AS publish
RUN dotnet publish "*********" -c Release -o /app
FROM base AS final
ENV ASPNETCORE_ENVIRONMENT=PROD
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "*********"]
RUN dotnet ef Обновление базы данных
(если вы не используете ядро .net, то мало что может измениться.)
в вашем стартапе у вас должно быть что-то вроде:
public static string ConnectionString
{
get
{
if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "PROD")
{
return Environment.GetEnvironmentVariable("CONNECTION_STRING");
}
else
{
return @"Server=.;Database=database;Trusted_Connection=True;ConnectRetryCount=0";
}
}
}
public UsersDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<UsersDbContext>();
optionsBuilder.UseSqlServer(ConnectionString);
return new UsersDbContext(optionsBuilder.Options);
}
внутри
public class XXXXXContextFactory : IDesignTimeDbContextFactory<XXXXXDbContext>
и в конце при запуске
- docker build -f xxxxxx/Dockerfile -t xxxxx.azurecr.io/xxxxx:latest . --build-arg connectionString="some connection string"
сборка докера должна завершить процесс миграции